Merged from develop
diff --git a/README.md b/README.md
index 47d85c1..c81a4fe 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,13 @@
 ![catch logo](catch-logo-small.png)
 
-*v1.0 build 53 (master branch)*
+*v1.1 build 14 (develop branch)*
 
 Build status (on Travis CI) [![Build Status](https://travis-ci.org/philsquared/Catch.png)](https://travis-ci.org/philsquared/Catch)
 
 [Please see this page if you are updating from a version before 1.0](docs/whats-changed.md)
 
+<a href="https://raw.githubusercontent.com/philsquared/Catch/develop/single_include/catch.hpp">[The latest, single header, version can be downloaded directly using this link]</a>
+
 ## What's the Catch?
 
 Catch stands for C++ Automated Test Cases in Headers and is a multi-paradigm automated test framework for C++ and Objective-C (and, maybe, C). It is implemented entirely in a set of header files, but is packaged up as a single header for extra convenience.
diff --git a/docs/Readme.md b/docs/Readme.md
index 45350f9..74b876d 100644
--- a/docs/Readme.md
+++ b/docs/Readme.md
@@ -9,6 +9,8 @@
 * [Command line](command-line.md)
 * [Build systems](build-systems.md)
 * [Supplying your own main()](own-main.md)
+* [Configuration](configuration.md)
+* [String Conversions](tostring.md)
 * [Why are my tests slow to compile?](slow-compiles.md)
 
 Other
@@ -16,8 +18,3 @@
 * [Why Catch?](why-catch.md)
 * [What's changed](whats-changed.md)
 * [Contributing](contributing.md)
-
----
-
-[Home](../README.md)
-
diff --git a/docs/assertions.md b/docs/assertions.md
index 47826b0..82bb96a 100644
--- a/docs/assertions.md
+++ b/docs/assertions.md
@@ -17,12 +17,12 @@
 Evaluates the expression and records the result. If an exception is thrown it is caught, reported, and counted as a failure. These are the macros you will use most of  the time
 
 Examples:
-
-```c++
+```
 CHECK( str == "string value" );
 CHECK( thisReturnsTrue() );
 REQUIRE( i == 42 );
 ```
+
 * **REQUIRE_FALSE(** _expression_ **)** and  
 * **CHECK_FALSE(** _expression_ **)**
 
@@ -30,10 +30,28 @@
 (these forms exist as a workaround for the fact that ! prefixed expressions cannot be decomposed).
 
 Example:
-```c++
+```
 REQUIRE_FALSE( thisReturnsFalse() );
 ```
 
+### Floating point comparisons
+
+When comparing floating point numbers - especially if at least one of them has been computed - great care must be taken to allow for rounding errors and inexact representations.
+
+Catch provides a way to perform tolerant comparisons of floating point values through use of a wrapper class called ```Approx```. ```Approx``` can be used on either side of a comparison expression. It overloads the comparisons operators to take a tolerance into account. Here's a simple example:
+
+```
+REQUIRE( performComputation() == Approx( 2.1 ) );
+```
+
+By default a small epsilon value is used that covers many simple cases of rounding errors. When this is insufficent the epsilon value (the amount within which a difference either way is ignored) can be specified by calling the ```epsilon()``` method on the ```Approx``` instance. e.g.:
+
+```
+REQUIRE( 22/7 == Approx( 3.141 ).epsilon( 0.01 ) );
+```
+
+When dealing with very large or very small numbers it can be useful to specify a scale, which can be achieved by calling the ```scale()``` method on the ```Approx``` instance.
+
 ## Exceptions
 
 * **REQUIRE_THROWS(** _expression_ **)** and  
@@ -61,4 +79,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/build-systems.md b/docs/build-systems.md
index 1cb93c8..b001dc1 100644
--- a/docs/build-systems.md
+++ b/docs/build-systems.md
@@ -1,5 +1,50 @@
 # Integration with build systems
 
+Build Systems may refer to low-level tools, like CMake, or larger systems that run on servers, like Jenkins or TeamCity. This page will talk about both.
+
+# Continuous Integration systems
+
+Probably the most important aspect to using Catch with a build server is the use of different reporters. Catch comes bundled with three reporters that should cover the majority of build servers out there - although adding more for better integration with some is always a possibility (as has been done with TeamCity).
+
+Two of these reporters are built in (XML and JUnit) and the third (TeamCity) is included as a separate header. It's possible that the other two may be split out in the future too - as that would make the core of Catch smaller for those that don't need them.
+
+## XML Reporter
+```-r xml``` 
+
+The XML Reporter writes in an XML format that is specific to Catch. 
+
+The advantage of this format is that it corresponds well to the way Catch works (especially the more unusual features, such as nested sections) and is a fully streaming format - that is it writes output as it goes, without having to store up all its results before it can start writing.
+
+The disadvantage is that, being specific to Catch, no existing build servers understand the format natively. It can be used as input to an XSLT transformation that could covert it to, say, HTML - although this loses the streaming advantage, of course.
+
+## JUnit Reporter
+```-r junit```
+
+The JUnit Reporter writes in an XML format that mimics the JUnit ANT schema.
+
+The advantage of this format is that the JUnit Ant schema is widely understood by most build servers and so can usually be consumed with no additional work.
+
+The disadvantage is that this schema was designed to correspond to how JUnit works - and there is a significant mismatch with how Catch works. Additionally the format is not streamable (because opening elements hold counts of failed and passing tests as attributes) - so the whole test run must complete before it can be written.
+
+## TeamCity Reporter
+```-r teamcity```
+
+The TeamCity Reporter writes TeamCity service messages to stdout. In order to be able to use this reporter an additional header must also be included.
+
+```catch_reporter_teamcity.hpp``` can be found in the ```include\reporters``` directory. It should be included in the same file that ```#define```s ```CATCH_CONFIG_MAIN``` or ```CATCH_CONFIG_RUNNER```. The ```#include``` should be placed after ```#include```ing Catch itself.
+
+e.g.:
+
+```
+#define CATCH_CONFIG_MAIN
+#include "catch.hpp"
+#include "catch_reporter_teamcity.hpp"
+```
+
+Being specific to TeamCity this is the best reporter to use with it - but it is completely unsuitable for any other purpose. It is a streaming format (it writes as it goes) - although test results don't appear in the TeamCity interface until the completion of a suite (usually the whole test run).
+
+# Low-level tools
+
 ## CMake
 
 You can use the following CMake script to automatically fetch Catch from github and configure it as an external project:
@@ -35,3 +80,7 @@
 include_directories(${CATCH_INCLUDE_DIR} ${COMMON_INCLUDES})
 enable_testing(true)  # Enables unit-testing.
 ```
+
+---
+
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/command-line.md b/docs/command-line.md
index f534d85..d1d4bd4 100644
--- a/docs/command-line.md
+++ b/docs/command-line.md
@@ -1,18 +1,33 @@
 Catch works quite nicely without any command line options at all - but for those times when you want greater control the following options are available.
-Note that options are described according to the following pattern:
+Click one of the followings links to take you straight to that option - or scroll on to browse the available options.
 
 <a href="#specifying-which-tests-to-run">               `    <test-spec> ...`</a><br />
-<a href="#choosing-a-reporter-to-use">                  `    -r, --reporter`</a><br />
-<a href="#breaking-into-the-debugger">                  `    -b, --break`</a><br />
+<a href="#usage">                                       `    -h, -?, --help`</a><br />
+<a href="#listing-available-tests-tags-or-reporters">   `    -l, --list-tests`</a><br />
+<a href="#listing-available-tests-tags-or-reporters">   `    -t, --list-tags`</a><br />
 <a href="#showing-results-for-successful-tests">        `    -s, --success`</a><br />
-<a href="#aborting-after-a-certain-number-of-failures"> `    -a, --abort`</a><br />
-<a href="#listing-available-tests-tags-or-reporters">   `    -l, --list`</a><br />
-<a href="#sending-output-to-a-file">                    `    -o, --out`</a><br />
-<a href="#naming-a-test-run">                           `    -n, --name`</a><br />
+<a href="#breaking-into-the-debugger">                  `    -b, --break`</a><br />
 <a href="#eliding-assertions-expected-to-throw">        `    -e, --nothrow`</a><br />
+<a href="#invisibles">                                  `    -i, --invisibles`</a><br />
+<a href="#sending-output-to-a-file">                    `    -o, --out`</a><br />
+<a href="#choosing-a-reporter-to-use">                  `    -r, --reporter`</a><br />
+<a href="#naming-a-test-run">                           `    -n, --name`</a><br />
+<a href="#aborting-after-a-certain-number-of-failures"> `    -a, --abort`</a><br />
+<a href="#aborting-after-a-certain-number-of-failures"> `    -x, --abortx`</a><br />
 <a href="#warnings">                                    `    -w, --warn`</a><br />
 <a href="#reporting-timings">                           `    -d, --durations`</a><br />
-<a href="#usage">                                       `    -h, -?, --help`</a><br />
+<a href="#input-file">                                  `    -f, --input-file`</a><br />
+
+</br>
+
+<a href="#list-test-names-only">                        `    --list-test-names-only`</a><br />
+<a href="#listing-available-tests-tags-or-reporters">   `    --list-reporters`</a><br />
+<a href="#order">                                       `    --order`</a><br />
+<a href="#rng-seed">                                    `    --rng-seed`</a><br />
+
+</br>
+
+
 
 <a id="specifying-which-tests-to-run"></a>
 ## Specifying which tests to run
@@ -21,7 +36,8 @@
 
 Test cases, wildcarded test cases, tags and tag expressions are all passed directly as arguments. Tags are distinguished by being enclosed in square brackets.
 
-If no test specs are supplied then all test cases, except "hidden" tests (tagged ```[hide]```, ```[.]``` or, in the legacy case, prefixed by `'./'`) are run.
+If no test specs are supplied then all test cases, except "hidden" tests, are run.
+A test is hidden by giving it any tag starting with (or just) a period (```.```) - or, in the deprecated case, tagged ```[hide]``` or given name starting with `'./'`. To specify hidden tests from the command line ```[.]``` or ```[hide]``` can be used *regardless of how they were declared*.
 
 Specs must be enclosed in quotes if they contain spaces. If they do not contain spaces the quotes are optional.
 
@@ -79,7 +95,7 @@
 <pre>-s, --success</pre>
 
 Usually you only want to see reporting for failed tests. Sometimes it's useful to see *all* the output (especially when you don't trust that that test you just added worked first time!).
-To see successul, as well as failing, test results just pass this option. Note that each reporter may treat this option differently. The Junit reporter, for example, logs all results regardless.
+To see successful, as well as failing, test results just pass this option. Note that each reporter may treat this option differently. The Junit reporter, for example, logs all results regardless.
 
 <a id="aborting-after-a-certain-number-of-failures"></a>
 ## Aborting after a certain number of failures
@@ -131,6 +147,13 @@
 
 When running with this option any throw checking assertions are skipped so as not to contribute additional noise. Be careful if this affects the behaviour of subsequent tests.
 
+<a id="invisibles"></a>
+## Make whitespace visible
+<pre>-i, --invisibles</pre>
+
+If a string comparison fails due to differences in whitespace - especially leading or trailing whitespace - it can be hard to see what's going on.
+This option transforms tabs and newline characters into ```\t``` and ```\n``` respectively when printing.
+
 <a id="warnings"></a>
 ## Warnings
 <pre>-w, --warn &lt;warning name></pre>
@@ -145,6 +168,47 @@
 
 When set to ```yes``` Catch will report the duration of each test case, in milliseconds. Note that it does this regardless of whether a test case passes or fails. Note, also, the certain reporters (e.g. Junit) always report test case durations regardless of this option being set or not.
 
+<a id="input-file"></a>
+## Load test names to run from a file
+<pre>-f, --input-file &lt;filename></pre>
+
+Provide the name of a file that contains a list of test case names - one per line. Blank lines are skipped and anything after the comment character, ```#```, is ignored.
+
+A useful way to generate an initial instance of this file is to use the <a href="#list-test-names-only">list-test-names-only</a> option. This can then be manually curated to specify a specific subset of tests - or in a specific order.
+
+<a id="list-test-names-only"></a>
+## Just test names
+<pre>--list-test-names-only</pre>
+
+This option lists all available tests in a non-indented form, one on each line. This makes it ideal for saving to a file and feeding back into the <a href="#input-file">```-f``` or ```--input-file```</a> option.
+
+
+<a id="order"></a>
+## Specify the order test cases are run
+<pre>--order &lt;decl|lex|rand&gt;</pre>
+
+Test cases are ordered one of three ways:
+
+
+### decl
+Declaration order. The order the tests were originally declared in. Note that ordering between files is not guaranteed and is implementation dependent.
+
+### lex
+Lexicographically sorted. Tests are sorted, alpha-numerically, by name.
+
+### rand
+Randomly sorted. Test names are sorted using ```std::random_shuffle()```. By default the random number generator is seeded with 0 - and so the order is repeatable. To control the random seed see <a href="#rng-seed">rng-seed</a>.
+
+<a id="rng-seed"></a>
+## Specify a seed for the Random Number Generator
+<pre>--rng-seed &lt;'time'|number&gt;</pre>
+
+Sets a seed for the random number generator using ```std::srand()```. 
+If a number is provided this is used directly as the seed so the random pattern is repeatable.
+Alternatively if the keyword ```time``` is provided then the result of calling ```std::time(0)``` is used and so the pattern becomes unpredictable.
+
+In either case the actual value for the seed is printed as part of Catch's output so if an issue is discovered that is sensitive to test ordering the ordering can be reproduced - even if it was originally seeded from ```std::time(0)```.
+
 <a id="usage"></a>
 ## Usage
 <pre>-h, -?, --help</pre>
@@ -153,4 +217,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/configuration.md b/docs/configuration.md
new file mode 100644
index 0000000..f12ec68
--- /dev/null
+++ b/docs/configuration.md
@@ -0,0 +1,66 @@
+Catch is designed to "just work" as much as possible. For most people the only configuration needed is telling Catch which source file should host all the implementation code (```CATCH_CONFIG_MAIN```).
+
+Nonetheless there are still some occasions where finer control is needed. For these occasions Catch exposes a small set of macros for configuring how it is built.
+
+#  main()/ implementation
+
+	CATCH_CONFIG_MAIN	// Designates this as implementation file and defines main()
+	CATCH_CONFIG_RUNNER	// Designates this as implementation file
+
+Although Catch is header only it still, internally, maintains a distinction between interface headers and headers that contain implementation. Only one source file in your test project should compile the implementation headers and this is controlled through the use of one of these macros - one of these identifiers should be defined before including Catch in *exactly one implementation file in your project*.
+
+#  Prefixing Catch macros
+
+	CATCH_CONFIG_PREFIX_ALL
+
+To keep test code clean and uncluttered Catch uses short macro names (e.g. ```TEST_CASE``` and ```REQUIRE```). Occasionally these may conflict with identifiers from platform headers or the system under test. In this case the above identifier can be defined. This will cause all the Catch user macros to be prefixed with ```CATCH_``` (e.g. ```CATCH_TEST_CASE``` and ```CATCH_REQUIRE```).
+
+
+#  Terminal colour
+
+	CATCH_CONFIG_COLOUR_NONE	// completely disables all text colouring
+	CATCH_CONFIG_COLOUR_WINDOWS	// forces the Win32 console API to be used
+	CATCH_CONFIG_COLOUR_ANSI	// forces ANSI colour codes to be used
+
+Yes, I am English, so I will continue to spell "colour" with a 'u'.
+
+When sending output to the terminal, if it detects that it can, Catch will use colourised text. On Windows the Win32 API, ```SetConsoleTextAttribute```, is used. On POSIX systems ANSI colour escape codes are inserted into the stream.
+
+For finer control you can define one of the above identifiers (these are mutually exclusive - but that is not checked so may behave unexpectedly if you mix them):
+
+Note that when ANSI colour codes are used "unistd.h" must be includable - along with a definition of ```isatty()```
+
+Typically you should place the ```#define``` before #including "catch.hpp" in your main source file - but if you prefer you can define it for your whole project by whatever your IDE or build system provides for you to do so.
+
+#  Console width
+
+	CATCH_CONFIG_CONSOLE_WIDTH = x // where x is a number
+
+Catch formats output intended for the console to fit within a fixed number of characters. This is especially important as indentation is used extensively and uncontrolled line wraps break this.
+By default a console width of 80 is assumed but this can be controlled by defining the above identifier to be a different value.
+
+#  stdout
+
+	CATCH_CONFIG_NOSTDOUT
+
+Catch does not use ```std::cout``` and ```std::cerr``` directly but gets them from ```Catch::cout()``` and ```Catch::cerr()``` respectively. If the above identifier is defined these functions are left unimplemented and you must implement them yourself. Their signatures are:
+
+    std::ostream& cout();
+    std::ostream& cerr();
+
+This can be useful on certain platforms that do not provide ```std::cout``` and ```std::cerr```, such as certain embedded systems.
+
+# C++ conformance toggles
+
+	CATCH_CONFIG_CPP11_NULLPTR
+	CATCH_CONFIG_CPP11_NOEXCEPT
+	CATCH_CONFIG_SFINAE				// Basic, C++03, support for SFINAE
+	CATCH_CONFIG_VARIADIC_MACROS 	// Usually pre-C++11 compiler extensions are sufficient
+	CATCH_CONFIG_NO_VARIADIC_MACROS	// Suppress if Catch is too eager to enable it
+
+Catch has some basic compiler detection that will attempt to select the appropriate mix of these macros. However being incomplete - and often without access to the respective compilers - this detection tends to be conservative.
+So overriding control is given to the user. If a compiler supports a feature (and Catch does not already detect it) then one or more of these may be defined to enable it (or suppress it, in some cases). If you do do this please raise an issue, specifying your compiler version (ideally with an idea of how to detect it) and stating that it has such support.
+
+---
+
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/contributing.md b/docs/contributing.md
index 57bf59c..5e22836 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -16,8 +16,8 @@
 
 The other directories are ```scripts``` which contains a set of python scripts to help in testing Catch as well as generating the single include, and docs, which contains the documentation as a set of markdown files.
 
- *This document is a work in progress and will be updated soon with new information.*
+ *this document is in-progress...*
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/logging.md b/docs/logging.md
index 4be20c5..a659b3e 100644
--- a/docs/logging.md
+++ b/docs/logging.md
@@ -49,4 +49,4 @@
 
 ---
 
-[Home](../README.md)
\ No newline at end of file
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/own-main.md b/docs/own-main.md
index 36e9ab5..f8c836e 100644
--- a/docs/own-main.md
+++ b/docs/own-main.md
@@ -47,9 +47,9 @@
   if( returnCode != 0 ) // Indicates a command line error
   	return returnCode;
 
-  // Writing to session.configData() or session.Config() here 
-  // overrides command line args.
-  // Only do this if you know you need to.
+  // writing to session.configData() or session.Config() here 
+  // overrides command line args
+  // only do this if you know you need to
 
   return session.run();
 }
@@ -65,4 +65,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/slow-compiles.md b/docs/slow-compiles.md
index 0673612..5291aec 100644
--- a/docs/slow-compiles.md
+++ b/docs/slow-compiles.md
@@ -19,4 +19,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/test-cases-and-sections.md b/docs/test-cases-and-sections.md
index 7e9379f..28426d7 100644
--- a/docs/test-cases-and-sections.md
+++ b/docs/test-cases-and-sections.md
@@ -9,7 +9,7 @@
 * **TEST_CASE(** _test name_ \[, _tags_ \] **)**
 * **SECTION(** _section name_ **)**
 
-_test name_ and _section name_ are free-form quoted strings. The optional _tags_ argument is a quoted string containing one or more tags enclosed in square brackets. Tags are discussed below. Test names must be unique within the Catch executable.
+_test name_ and _section name_ are free form, quoted, strings. The optional _tags_ argument is a quoted string containing one or more tags enclosed in square brackets. Tags are discussed below. Test names must be unique within the Catch executable.
 
 For examples see the [Tutorial](tutorial.md)
 
@@ -57,4 +57,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/test-fixtures.md b/docs/test-fixtures.md
index adac75d..6bef762 100644
--- a/docs/test-fixtures.md
+++ b/docs/test-fixtures.md
@@ -1,4 +1,4 @@
-Although Catch allows you to group tests together as sections within a test case, it can still be convenient, sometimes, to group them using a more traditional test fixture. Catch fully supports this too. You define the test fixture as a simple structure:
+Although Catch allows you to group tests together as sections within a test case, it can still convenient, sometimes, to group them using a more traditional test fixture. Catch fully supports this too. You define the test fixture as a simple structure:
 
 ```c++
 class UniqueTestsFixture {
@@ -29,4 +29,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/tostring.md b/docs/tostring.md
new file mode 100644
index 0000000..f354d23
--- /dev/null
+++ b/docs/tostring.md
@@ -0,0 +1,46 @@
+# String conversions
+
+Catch needs to be able to convert types you use in assertions and logging expressions into strings (for logging and reporting purposes).
+Most built-in or std types are supported out of the box but there are two ways that you can tell Catch how to convert your own types (or other, third-party types) into strings.
+
+## operator << overload for std::ostream
+
+This is the standard way of providing string conversions in C++ - and the chances are you may already provide this for your own purposes. If you're not familiar with this idiom it involves writing a free function of the form:
+
+```
+std::ostream& operator << ( std::ostream& os, T const& value ) {
+	os << convertMyTypeToString( value );
+	return os;
+}
+```
+
+(where ```T``` is your type and ```convertMyTypeToString``` is where you'll write whatever code is necessary to make your type printable - it doesn't have to be in another function).
+
+You should put this function in the same namespace as your type.
+
+Alternatively you may prefer to write it as a member function:
+
+```
+std::ostream& T::operator << ( std::ostream& os ) const {
+	os << convertMyTypeToString( *this );
+	return os;
+}
+```
+
+## Catch::toString overload
+
+If you don't want to provide an ```operator <<``` overload, or you want to convert your type differently for testing purposes, you can provide an overload for ```Catch::toString()``` for your type.
+
+```
+namespace Catch {
+	std::string toString( T const& value ) {
+		return convertMyTypeToString( value );
+	}
+}
+```
+
+Again ```T``` is your type and ```convertMyTypeToString``` is where you'll write whatever code is necessary to make your type printable. Note that the function must be in the Catch namespace, which itself must be in the global namespace.
+
+---
+
+[Home](Readme.md)
diff --git a/docs/tutorial.md b/docs/tutorial.md
index ef48ec6..c0a163d 100644
--- a/docs/tutorial.md
+++ b/docs/tutorial.md
@@ -86,10 +86,10 @@
 
 Although this was a simple test it's been enough to demonstrate a few things about how Catch is used. Let's take moment to consider those before we move on.
 
-1. All we did was ```#define``` one identifier and ```#include``` one header and we got everything - even an implementation of ```main()``` that will [respond to command line arguments](command-line.md). You can only use that ```#define``` in one implementation file, for (hopefully) obvious reasons. Once you have more than one file with unit tests in you'll just ```#include "catch.hpp"``` and go. Usually it's a good idea to have a dedicated implementation file that just has ```#define CATCH_CONFIG_MAIN``` and ```#include "catch.hpp"```. You can also provide your own implementation of main and drive Catch yourself (see [Supplying-your-own-main()](own-main.md).
-2. We introduce test cases with the TEST_CASE macro. This macro takes one or two arguments - a free form test name and, optionally, one or more tags (for more see <a href="#test-cases-and-sections">Test cases and Sections</a>, below. The test name must be unique. You can run sets of tests by specifying a wildcarded test name or a tag expression. See the [command line docs](command-line.md) for more information on running tests.
+1. All we did was ```#define``` one identifier and ```#include``` one header and we got everything - even an implementation of ```main()``` that will [respond to command line arguments](command-line.md). You can only use that ```#define``` in one implementation file, for (hopefully) obvious reasons. Once you have more than one file with unit tests in you'll just ```#include "catch.hpp"``` and go. Usually it's a good idea to have a dedicated implementation file that just has ```#define CATCH_CONFIG_MAIN``` and ```#include "catch.hpp"```. You can also provide your own implementation of main and drive Catch yourself (see [Supplying-your-own-main()](own-main.md)).
+2. We introduce test cases with the ```TEST_CASE``` macro. This macro takes one or two arguments - a free form test name and, optionally, one or more tags (for more see <a href="#test-cases-and-sections">Test cases and Sections</a>, below. The test name must be unique. You can run sets of tests by specifying a wildcarded test name or a tag expression. See the [command line docs](command-line.md) for more information on running tests.
 3. The name and tags arguments are just strings. We haven't had to declare a function or method - or explicitly register the test case anywhere. Behind the scenes a function with a generated name is defined for you, and automatically registered using static registry classes. By abstracting the function name away we can name our tests without the constraints of identifier names.
-4. We write our individual test assertions using the REQUIRE macro. Rather than a separate macro for each type of condition we express the condition naturally using C/C++ syntax. Behind the scenes a simple set of expression templates captures the left-hand-side and right-hand-side of the expression so we can display the values in our test report. As we'll see later there _are_ other assertion macros - but because of this technique the number of them is drastically reduced.
+4. We write our individual test assertions using the ```REQUIRE``` macro. Rather than a separate macro for each type of condition we express the condition naturally using C/C++ syntax. Behind the scenes a simple set of expression templates captures the left-hand-side and right-hand-side of the expression so we can display the values in our test report. As we'll see later there _are_ other assertion macros - but because of this technique the number of them is drastically reduced.
 
 <a id="test-cases-and-sections"></a>
 ## Test cases and sections
@@ -157,7 +157,7 @@
     }
 ```
 
-Sections can be nested to an arbitrary depth (limited only by your stack size). Each leaf section (i.e. a section that contains no nested sections) will be executed exactly once, on a separate path of execution from any other leaf section (so no leaf section can interfere with another). Obviously a failure in a parent section will prevent nested sections from running - but that's the idea.
+Sections can be nested to an arbitrary depth (limited only by your stack size). Each leaf section (i.e. a section that contains no nested sections) will be executed exactly once, on a separate path of execution from any other leaf section (so no leaf section can interfere with another). A failure in a parent section will prevent nested sections from running - but then that's the idea.
 
 ## BDD-Style
 
@@ -220,9 +220,11 @@
 ```
 
 ## Next steps
-For more specific information see the [Reference pages](Readme.md)
 
+This has been a brief introduction to get you up and running with Catch, and to point out some of the key differences between Catch and other frameworks you may already be familiar with. This will get you going quite far already and you are now in a position to dive in and write some tests.
+
+Of course there is more to learn - most of which you should be able to page-fault in as you go. Please see the every-growing [Reference section](Readme.md) for what's available.
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
diff --git a/docs/whats-changed.md b/docs/whats-changed.md
index 40b95a6..10a1bbc 100644
--- a/docs/whats-changed.md
+++ b/docs/whats-changed.md
@@ -21,4 +21,4 @@
 
 ---
 
-[Home](../README.md)
+[Home](Readme.md)
\ No newline at end of file
diff --git a/docs/why-catch.md b/docs/why-catch.md
index d90ee01..93488d2 100644
--- a/docs/why-catch.md
+++ b/docs/why-catch.md
@@ -39,4 +39,4 @@
 
 ---
 
-[Home](../README.md)
\ No newline at end of file
+[Home](Readme.md)
\ No newline at end of file
diff --git a/include/catch.hpp b/include/catch.hpp
index 4251cd0..9f82c72 100644
--- a/include/catch.hpp
+++ b/include/catch.hpp
@@ -11,11 +11,11 @@
 
 #include "internal/catch_suppress_warnings.h"
 
-#ifdef CATCH_CONFIG_MAIN
-#  define CATCH_CONFIG_RUNNER
+#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
+#  define CATCH_IMPL
 #endif
 
-#ifdef CATCH_CONFIG_RUNNER
+#ifdef CATCH_IMPL
 #  ifndef CLARA_CONFIG_MAIN
 #    define CLARA_CONFIG_MAIN_NOT_DEFINED
 #    define CLARA_CONFIG_MAIN
@@ -43,7 +43,7 @@
 #include "internal/catch_objc.hpp"
 #endif
 
-#ifdef CATCH_CONFIG_RUNNER
+#ifdef CATCH_IMPL
 #include "internal/catch_impl.hpp"
 #endif
 
diff --git a/include/catch_runner.hpp b/include/catch_runner.hpp
index e6303d8..bf03ccd 100644
--- a/include/catch_runner.hpp
+++ b/include/catch_runner.hpp
@@ -60,6 +60,14 @@
                     m_testsAlreadyRun.insert( *it );
                 }
             }
+            std::vector<TestCase> skippedTestCases;
+            getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, *m_config, skippedTestCases, true );
+            
+            for( std::vector<TestCase>::const_iterator it = skippedTestCases.begin(), itEnd = skippedTestCases.end();
+                    it != itEnd;
+                    ++it )
+                m_reporter->skipTest( *it );
+
             context.testGroupEnded( "all tests", totals, 1, 1 );
             return totals;
         }
@@ -97,7 +105,7 @@
         std::set<TestCase> m_testsAlreadyRun;
     };
 
-    class Session {
+    class Session : NonCopyable {
         static bool alreadyInstantiated;
 
     public:
@@ -108,7 +116,7 @@
         : m_cli( makeCommandLineParser() ) {
             if( alreadyInstantiated ) {
                 std::string msg = "Only one instance of Catch::Session can ever be used";
-                std::cerr << msg << std::endl;
+                Catch::cerr() << msg << std::endl;
                 throw std::logic_error( msg );
             }
             alreadyInstantiated = true;
@@ -118,15 +126,15 @@
         }
 
         void showHelp( std::string const& processName ) {
-            std::cout << "\nCatch v"    << libraryVersion.majorVersion << "."
+            Catch::cout() << "\nCatch v"    << libraryVersion.majorVersion << "."
                                         << libraryVersion.minorVersion << " build "
                                         << libraryVersion.buildNumber;
             if( libraryVersion.branchName != std::string( "master" ) )
-                std::cout << " (" << libraryVersion.branchName << " branch)";
-            std::cout << "\n";
+                Catch::cout() << " (" << libraryVersion.branchName << " branch)";
+            Catch::cout() << "\n";
 
-            m_cli.usage( std::cout, processName );
-            std::cout << "For more detail usage please see the project docs\n" << std::endl;
+            m_cli.usage( Catch::cout(), processName );
+            Catch::cout() << "For more detail usage please see the project docs\n" << std::endl;
         }
 
         int applyCommandLine( int argc, char* const argv[], OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) {
@@ -140,11 +148,11 @@
             catch( std::exception& ex ) {
                 {
                     Colour colourGuard( Colour::Red );
-                    std::cerr   << "\nError(s) in input:\n"
+                    Catch::cerr()   << "\nError(s) in input:\n"
                                 << Text( ex.what(), TextAttributes().setIndent(2) )
                                 << "\n\n";
                 }
-                m_cli.usage( std::cout, m_configData.processName );
+                m_cli.usage( Catch::cout(), m_configData.processName );
                 return (std::numeric_limits<int>::max)();
             }
             return 0;
@@ -170,6 +178,9 @@
             try
             {
                 config(); // Force config to be constructed
+
+                std::srand( m_configData.rngSeed );
+
                 Runner runner( m_config );
 
                 // Handle list request
@@ -179,7 +190,7 @@
                 return static_cast<int>( runner.runTests().assertions.failed );
             }
             catch( std::exception& ex ) {
-                std::cerr << ex.what() << std::endl;
+                Catch::cerr() << ex.what() << std::endl;
                 return (std::numeric_limits<int>::max)();
             }
         }
diff --git a/include/external/clara.h b/include/external/clara.h
index d8e83ac..ce2ef2e 100644
--- a/include/external/clara.h
+++ b/include/external/clara.h
@@ -620,7 +620,7 @@
             m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens )
         {
             if( other.m_floatingArg.get() )
-                m_floatingArg = ArgAutoPtr( new Arg( *other.m_floatingArg ) );
+                m_floatingArg.reset( new Arg( *other.m_floatingArg ) );
         }
 
         CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) {
@@ -649,7 +649,7 @@
         ArgBuilder operator[]( UnpositionalTag ) {
             if( m_floatingArg.get() )
                 throw std::logic_error( "Only one unpositional argument can be added" );
-            m_floatingArg = ArgAutoPtr( new Arg() );
+            m_floatingArg.reset( new Arg() );
             ArgBuilder builder( m_floatingArg.get() );
             return builder;
         }
@@ -791,7 +791,7 @@
                 if( it == itEnd ) {
                     if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens )
                         unusedTokens.push_back( token );
-                    else if( m_throwOnUnrecognisedTokens )
+                    else if( errors.empty() && m_throwOnUnrecognisedTokens )
                         errors.push_back( "unrecognised option: " + token.data );
                 }
             }
diff --git a/include/internal/catch_capture.hpp b/include/internal/catch_capture.hpp
index 1285b31..5859126 100644
--- a/include/internal/catch_capture.hpp
+++ b/include/internal/catch_capture.hpp
@@ -15,7 +15,7 @@
 #include "catch_common.h"
 #include "catch_tostring.h"
 #include "catch_interfaces_runner.h"
-#include "internal/catch_compiler_capabilities.h"
+#include "catch_compiler_capabilities.h"
 
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -134,7 +134,7 @@
             std::string matcherAsString = ::Catch::Matchers::matcher.toString(); \
             __catchResult \
                 .setLhs( Catch::toString( arg ) ) \
-                .setRhs( matcherAsString == "{?}" ? #matcher : matcherAsString ) \
+                .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \
                 .setOp( "matches" ) \
                 .setResultType( ::Catch::Matchers::matcher.match( arg ) ); \
             __catchResult.captureExpression(); \
diff --git a/include/internal/catch_commandline.hpp b/include/internal/catch_commandline.hpp
index c7c3384..8b08536 100644
--- a/include/internal/catch_commandline.hpp
+++ b/include/internal/catch_commandline.hpp
@@ -29,7 +29,28 @@
             config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions );
         else
             throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" );
-
+    }
+    inline void setOrder( ConfigData& config, std::string const& order ) {
+        if( startsWith( "declared", order ) )
+            config.runOrder = RunTests::InDeclarationOrder;
+        else if( startsWith( "lexical", order ) )
+            config.runOrder = RunTests::InLexicographicalOrder;
+        else if( startsWith( "random", order ) )
+            config.runOrder = RunTests::InRandomOrder;
+        else
+            throw std::runtime_error( "Unrecognised ordering: '" + order + "'" );
+    }
+    inline void setRngSeed( ConfigData& config, std::string const& seed ) {
+        if( seed == "time" ) {
+            config.rngSeed = static_cast<unsigned int>( std::time(0) );
+        }
+        else {
+            std::stringstream ss;
+            ss << seed;
+            ss >> config.rngSeed;
+            if( ss.fail() )
+                throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" );
+        }
     }
     inline void setVerbosity( ConfigData& config, int level ) {
         // !TBD: accept strings?
@@ -137,10 +158,22 @@
             .describe( "list all/matching test cases names only" )
             .bind( &ConfigData::listTestNamesOnly );
 
-        cli["--list-reporters"]
+        cli["--list-reporters"] 
             .describe( "list all reporters" )
             .bind( &ConfigData::listReporters );
 
+        cli["--order"]
+            .describe( "test case order (defaults to decl)" )
+            .bind( &setOrder, "decl|lex|rand" );
+
+        cli["--rng-seed"]
+            .describe( "set a specific seed for random numbers" )
+            .bind( &setRngSeed, "'time'|number" );
+
+        cli["--force-colour"]
+            .describe( "force colourised output" )
+            .bind( &ConfigData::forceColour );
+
         return cli;
     }
 
diff --git a/include/internal/catch_common.h b/include/internal/catch_common.h
index 967b7fc..aadb0d3 100644
--- a/include/internal/catch_common.h
+++ b/include/internal/catch_common.h
@@ -24,8 +24,16 @@
 namespace Catch {
 
     class NonCopyable {
-        NonCopyable( NonCopyable const& );
-        void operator = ( NonCopyable const& );
+#ifdef CATCH_CPP11_OR_GREATER
+        NonCopyable( NonCopyable const& )              = delete;
+        NonCopyable( NonCopyable && )                  = delete;
+        NonCopyable& operator = ( NonCopyable const& ) = delete;
+        NonCopyable& operator = ( NonCopyable && )     = delete;
+#else
+        NonCopyable( NonCopyable const& info );
+        NonCopyable& operator = ( NonCopyable const& );
+#endif
+
     protected:
         NonCopyable() {}
         virtual ~NonCopyable();
@@ -63,6 +71,7 @@
     void toLowerInPlace( std::string& s );
     std::string toLower( std::string const& s );
     std::string trim( std::string const& str );
+    bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis );
 
     struct pluralise {
         pluralise( std::size_t count, std::string const& label );
@@ -85,6 +94,7 @@
 #  endif
         bool empty() const;
         bool operator == ( SourceLineInfo const& other ) const;
+        bool operator < ( SourceLineInfo const& other ) const;
 
         std::string file;
         std::size_t line;
diff --git a/include/internal/catch_common.hpp b/include/internal/catch_common.hpp
index 6147aa5..8a42d0a 100644
--- a/include/internal/catch_common.hpp
+++ b/include/internal/catch_common.hpp
@@ -36,7 +36,21 @@
 
         return start != std::string::npos ? str.substr( start, 1+end-start ) : "";
     }
-
+    
+    bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
+        bool replaced = false;
+        std::size_t i = str.find( replaceThis );
+        while( i != std::string::npos ) {
+            replaced = true;
+            str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() );
+            if( i < str.size()-withThis.size() )
+                i = str.find( replaceThis, i+withThis.size() );
+            else
+                i = std::string::npos;
+        }
+        return replaced;
+    }
+    
     pluralise::pluralise( std::size_t count, std::string const& label )
     :   m_count( count ),
         m_label( label )
@@ -64,6 +78,9 @@
     bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const {
         return line == other.line && file == other.file;
     }
+    bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const {
+        return line < other.line || ( line == other.line  && file < other.file );
+    }
 
     std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
 #ifndef __GNUG__
diff --git a/include/internal/catch_compiler_capabilities.h b/include/internal/catch_compiler_capabilities.h
index 76d0ffd..5ed98c2 100644
--- a/include/internal/catch_compiler_capabilities.h
+++ b/include/internal/catch_compiler_capabilities.h
@@ -80,6 +80,10 @@
 // Visual C++
 #ifdef _MSC_VER
 
+#if (_MSC_VER >= 1600)
+#define CATCH_CONFIG_CPP11_NULLPTR
+#endif
+
 #if (_MSC_VER >= 1310 ) // (VC++ 7.0+)
 //#define CATCH_CONFIG_SFINAE // Not confirmed
 #endif
diff --git a/include/internal/catch_config.hpp b/include/internal/catch_config.hpp
index 1217b9a..1f3ca64 100644
--- a/include/internal/catch_config.hpp
+++ b/include/internal/catch_config.hpp
@@ -17,6 +17,7 @@
 #include <vector>
 #include <string>
 #include <iostream>
+#include <ctime>
 
 #ifndef CATCH_CONFIG_CONSOLE_WIDTH
 #define CATCH_CONFIG_CONSOLE_WIDTH 80
@@ -36,10 +37,13 @@
             noThrow( false ),
             showHelp( false ),
             showInvisibles( false ),
+            forceColour( false ),
             abortAfter( -1 ),
+            rngSeed( 0 ),
             verbosity( Verbosity::Normal ),
             warnings( WarnAbout::Nothing ),
-            showDurations( ShowDurations::DefaultForReporter )
+            showDurations( ShowDurations::DefaultForReporter ),
+            runOrder( RunTests::InDeclarationOrder )
         {}
 
         bool listTests;
@@ -52,12 +56,15 @@
         bool noThrow;
         bool showHelp;
         bool showInvisibles;
+        bool forceColour;
 
         int abortAfter;
+        unsigned int rngSeed;
 
         Verbosity::Level verbosity;
         WarnAbout::What warnings;
         ShowDurations::OrNot showDurations;
+        RunTests::InWhatOrder runOrder;
 
         std::string reporterName;
         std::string outputFilename;
@@ -76,12 +83,12 @@
     public:
 
         Config()
-        :   m_os( std::cout.rdbuf() )
+        :   m_os( Catch::cout().rdbuf() )
         {}
 
         Config( ConfigData const& data )
         :   m_data( data ),
-            m_os( std::cout.rdbuf() )
+            m_os( Catch::cout().rdbuf() )
         {
             if( !data.testsOrTags.empty() ) {
                 TestSpecParser parser( ITagAliasRegistry::get() );
@@ -92,7 +99,7 @@
         }
 
         virtual ~Config() {
-            m_os.rdbuf( std::cout.rdbuf() );
+            m_os.rdbuf( Catch::cout().rdbuf() );
             m_stream.release();
         }
 
@@ -114,7 +121,7 @@
         bool shouldDebugBreak() const { return m_data.shouldDebugBreak; }
 
         void setStreamBuf( std::streambuf* buf ) {
-            m_os.rdbuf( buf ? buf : std::cout.rdbuf() );
+            m_os.rdbuf( buf ? buf : Catch::cout().rdbuf() );
         }
 
         void useStream( std::string const& streamName ) {
@@ -126,7 +133,6 @@
 
         std::string getReporterName() const { return m_data.reporterName; }
 
-
         int abortAfter() const { return m_data.abortAfter; }
 
         TestSpec const& testSpec() const { return m_testSpec; }
@@ -141,7 +147,9 @@
         virtual bool includeSuccessfulResults() const   { return m_data.showSuccessfulTests; }
         virtual bool warnAboutMissingAssertions() const { return m_data.warnings & WarnAbout::NoAssertions; }
         virtual ShowDurations::OrNot showDurations() const { return m_data.showDurations; }
-
+        virtual RunTests::InWhatOrder runOrder() const  { return m_data.runOrder; }
+        virtual unsigned int rngSeed() const    { return m_data.rngSeed; }
+        virtual bool forceColour() const { return m_data.forceColour; }
 
     private:
         ConfigData m_data;
diff --git a/include/internal/catch_console_colour.hpp b/include/internal/catch_console_colour.hpp
index 4caed07..f0a8a69 100644
--- a/include/internal/catch_console_colour.hpp
+++ b/include/internal/catch_console_colour.hpp
@@ -12,10 +12,6 @@
 
 namespace Catch {
 
-    namespace Detail {
-        struct IColourImpl;
-    }
-
     struct Colour {
         enum Code {
             None = 0,
@@ -61,7 +57,6 @@
         static void use( Code _colourCode );
 
     private:
-        static Detail::IColourImpl* impl();
         bool m_moved;
     };
 
diff --git a/include/internal/catch_console_colour_impl.hpp b/include/internal/catch_console_colour_impl.hpp
index 5f21506..2c4b36c 100644
--- a/include/internal/catch_console_colour_impl.hpp
+++ b/include/internal/catch_console_colour_impl.hpp
@@ -10,14 +10,36 @@
 
 #include "catch_console_colour.hpp"
 
-namespace Catch { namespace Detail {
-    struct IColourImpl {
-        virtual ~IColourImpl() {}
-        virtual void use( Colour::Code _colourCode ) = 0;
-    };
-}}
+namespace Catch {
+    namespace {
 
-#if defined ( CATCH_PLATFORM_WINDOWS ) /////////////////////////////////////////
+        struct IColourImpl {
+            virtual ~IColourImpl() {}
+            virtual void use( Colour::Code _colourCode ) = 0;
+        };
+
+        struct NoColourImpl : IColourImpl {
+            void use( Colour::Code ) {}
+
+            static IColourImpl* instance() {
+                static NoColourImpl s_instance;
+                return &s_instance;
+            }
+        };
+
+    } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+#   ifdef CATCH_PLATFORM_WINDOWS
+#       define CATCH_CONFIG_COLOUR_WINDOWS
+#   else
+#       define CATCH_CONFIG_COLOUR_ANSI
+#   endif
+#endif
+
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
 
 #ifndef NOMINMAX
 #define NOMINMAX
@@ -32,7 +54,7 @@
 namespace Catch {
 namespace {
 
-    class Win32ColourImpl : public Detail::IColourImpl {
+    class Win32ColourImpl : public IColourImpl {
     public:
         Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
         {
@@ -69,11 +91,7 @@
         WORD originalAttributes;
     };
 
-    inline bool shouldUseColourForPlatform() {
-        return true;
-    }
-
-    static Detail::IColourImpl* platformColourInstance() {
+    IColourImpl* platformColourInstance() {
         static Win32ColourImpl s_instance;
         return &s_instance;
     }
@@ -81,7 +99,7 @@
 } // end anon namespace
 } // end namespace Catch
 
-#else // Not Windows - assumed to be POSIX compatible //////////////////////////
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
 
 #include <unistd.h>
 
@@ -92,7 +110,7 @@
     // Thanks to Adam Strzelecki for original contribution
     // (http://github.com/nanoant)
     // https://github.com/philsquared/Catch/pull/131
-    class PosixColourImpl : public Detail::IColourImpl {
+    class PosixColourImpl : public IColourImpl {
     public:
         virtual void use( Colour::Code _colourCode ) {
             switch( _colourCode ) {
@@ -113,53 +131,48 @@
                 case Colour::Bright: throw std::logic_error( "not a colour" );
             }
         }
+        static IColourImpl* instance() {
+            static PosixColourImpl s_instance;
+            return &s_instance;
+        }
+
     private:
         void setColour( const char* _escapeCode ) {
-            std::cout << '\033' << _escapeCode;
+            Catch::cout() << '\033' << _escapeCode;
         }
     };
 
-    inline bool shouldUseColourForPlatform() {
-        return isatty(STDOUT_FILENO);
-    }
-
-    static Detail::IColourImpl* platformColourInstance() {
-        static PosixColourImpl s_instance;
-        return &s_instance;
+    IColourImpl* platformColourInstance() {
+        Ptr<IConfig const> config = getCurrentContext().getConfig();
+        return (config && config->forceColour()) || isatty(STDOUT_FILENO)
+            ? PosixColourImpl::instance()
+            : NoColourImpl::instance();
     }
 
 } // end anon namespace
 } // end namespace Catch
 
-#endif // not Windows
+#else  // not Windows or ANSI ///////////////////////////////////////////////
 
 namespace Catch {
 
-    namespace {
-        struct NoColourImpl : Detail::IColourImpl {
-            void use( Colour::Code ) {}
+    static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
 
-            static IColourImpl* instance() {
-                static NoColourImpl s_instance;
-                return &s_instance;
-            }
-        };
-        static bool shouldUseColour() {
-            return shouldUseColourForPlatform() && !isDebuggerActive();
-        }
-    }
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
 
     Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); }
     Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; }
     Colour::~Colour(){ if( !m_moved ) use( None ); }
-    void Colour::use( Code _colourCode ) {
-        impl()->use( _colourCode );
-    }
 
-    Detail::IColourImpl* Colour::impl() {
-        return shouldUseColour()
-            ? platformColourInstance()
-            : NoColourImpl::instance();
+    void Colour::use( Code _colourCode ) {
+        static IColourImpl* impl = isDebuggerActive()
+            ? NoColourImpl::instance()
+            : platformColourInstance();
+        impl->use( _colourCode );
     }
 
 } // end namespace Catch
diff --git a/include/internal/catch_context_impl.hpp b/include/internal/catch_context_impl.hpp
index 75bbfb0..a495503 100644
--- a/include/internal/catch_context_impl.hpp
+++ b/include/internal/catch_context_impl.hpp
@@ -60,7 +60,7 @@
             std::string testName = getResultCapture()->getCurrentTestName();
 
             std::map<std::string, IGeneratorsForTest*>::const_iterator it =
-            m_generatorsByTestName.find( testName );
+                m_generatorsByTestName.find( testName );
             return it != m_generatorsByTestName.end()
                 ? it->second
                 : NULL;
@@ -96,8 +96,8 @@
     }
 
     Stream createStream( std::string const& streamName ) {
-        if( streamName == "stdout" ) return Stream( std::cout.rdbuf(), false );
-        if( streamName == "stderr" ) return Stream( std::cerr.rdbuf(), false );
+        if( streamName == "stdout" ) return Stream( Catch::cout().rdbuf(), false );
+        if( streamName == "stderr" ) return Stream( Catch::cerr().rdbuf(), false );
         if( streamName == "debug" ) return Stream( new StreamBufImpl<OutputDebugWriter>, true );
 
         throw std::domain_error( "Unknown stream: " + streamName );
diff --git a/include/internal/catch_debugger.hpp b/include/internal/catch_debugger.hpp
index 49c485f..4151aec 100644
--- a/include/internal/catch_debugger.hpp
+++ b/include/internal/catch_debugger.hpp
@@ -51,7 +51,7 @@
 
             size = sizeof(info);
             if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0) != 0 ) {
-                std::cerr << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
+                Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
                 return false;
             }
 
@@ -92,7 +92,7 @@
     namespace Catch {
         void writeToDebugConsole( std::string const& text ) {
             // !TBD: Need a version for Mac/ XCode and other IDEs
-            std::cout << text;
+            Catch::cout() << text;
         }
     }
 #endif // Platform
diff --git a/include/internal/catch_exception_translator_registry.hpp b/include/internal/catch_exception_translator_registry.hpp
index a1cc705..29ddf8e 100644
--- a/include/internal/catch_exception_translator_registry.hpp
+++ b/include/internal/catch_exception_translator_registry.hpp
@@ -35,7 +35,7 @@
                     throw;
                 }
                 @catch (NSException *exception) {
-                    return toString( [exception description] );
+                    return Catch::toString( [exception description] );
                 }
 #else
                 throw;
diff --git a/include/internal/catch_fatal_condition.hpp b/include/internal/catch_fatal_condition.hpp
new file mode 100644
index 0000000..dd21d59
--- /dev/null
+++ b/include/internal/catch_fatal_condition.hpp
@@ -0,0 +1,85 @@
+/*
+ *  Created by Phil on 21/08/2014
+ *  Copyright 2014 Two Blue Cubes Ltd. All rights reserved.
+ *
+ *  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 TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED
+#define TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED
+
+
+namespace Catch {
+
+    // Report the error condition then exit the process
+    inline void fatal( std::string const& message, int exitCode ) {
+        IContext& context = Catch::getCurrentContext();
+        IResultCapture* resultCapture = context.getResultCapture();
+        resultCapture->handleFatalErrorCondition( message );
+
+		if( Catch::alwaysTrue() ) // avoids "no return" warnings
+            exit( exitCode );
+    }
+
+} // namespace Catch
+
+#if defined ( CATCH_PLATFORM_WINDOWS ) /////////////////////////////////////////
+
+namespace Catch {
+
+    struct FatalConditionHandler {
+		void reset() {}
+	};
+
+} // namespace Catch
+
+#else // Not Windows - assumed to be POSIX compatible //////////////////////////
+
+#include <signal.h>
+
+namespace Catch {
+
+    struct SignalDefs { int id; const char* name; };
+    extern SignalDefs signalDefs[];
+    SignalDefs signalDefs[] = {
+            { SIGINT,  "SIGINT - Terminal interrupt signal" },
+            { SIGILL,  "SIGILL - Illegal instruction signal" },
+            { SIGFPE,  "SIGFPE - Floating point error signal" },
+            { SIGSEGV, "SIGSEGV - Segmentation violation signal" },
+            { SIGTERM, "SIGTERM - Termination request signal" },
+            { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
+        };
+
+    struct FatalConditionHandler {
+
+        static void handleSignal( int sig ) {
+            for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                if( sig == signalDefs[i].id )
+                    fatal( signalDefs[i].name, -sig );
+            fatal( "<unknown signal>", -sig );
+        }
+
+        FatalConditionHandler() : m_isSet( true ) {
+            for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                signal( signalDefs[i].id, handleSignal );
+        }
+        ~FatalConditionHandler() {
+            reset();
+        }
+        void reset() {
+            if( m_isSet ) {
+                for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                    signal( signalDefs[i].id, SIG_DFL );
+                m_isSet = false;
+            }
+        }
+
+        bool m_isSet;
+    };
+
+} // namespace Catch
+
+#endif // not Windows
+
+#endif // TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED
diff --git a/include/internal/catch_impl.hpp b/include/internal/catch_impl.hpp
index cc03ae0..24a8c3f 100644
--- a/include/internal/catch_impl.hpp
+++ b/include/internal/catch_impl.hpp
@@ -16,7 +16,7 @@
 #pragma clang diagnostic ignored "-Wweak-vtables"
 #endif
 
-#include "catch_runner.hpp"
+#include "../catch_runner.hpp"
 #include "catch_registry_hub.hpp"
 #include "catch_notimplemented_exception.hpp"
 #include "catch_context_impl.hpp"
@@ -88,8 +88,6 @@
     Matchers::Impl::StdString::EndsWith::~EndsWith() {}
 
     void Config::dummy() {}
-
-    INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "xml", XmlReporter )
 }
 
 #ifdef __clang__
diff --git a/include/internal/catch_interfaces_capture.h b/include/internal/catch_interfaces_capture.h
index 6565f0e..bdbcfb2 100644
--- a/include/internal/catch_interfaces_capture.h
+++ b/include/internal/catch_interfaces_capture.h
@@ -35,6 +35,8 @@
 
         virtual std::string getCurrentTestName() const = 0;
         virtual const AssertionResult* getLastResult() const = 0;
+
+        virtual void handleFatalErrorCondition( std::string const& message ) = 0;
     };
 
     IResultCapture& getResultCapture();
diff --git a/include/internal/catch_interfaces_config.h b/include/internal/catch_interfaces_config.h
index c7610d9..1281bd7 100644
--- a/include/internal/catch_interfaces_config.h
+++ b/include/internal/catch_interfaces_config.h
@@ -32,6 +32,11 @@
         Always,
         Never
     }; };
+    struct RunTests { enum InWhatOrder {
+        InDeclarationOrder,
+        InLexicographicalOrder,
+        InRandomOrder
+    }; };
 
     class TestSpec;
 
@@ -49,6 +54,9 @@
         virtual bool showInvisibles() const = 0;
         virtual ShowDurations::OrNot showDurations() const = 0;
         virtual TestSpec const& testSpec() const = 0;
+        virtual RunTests::InWhatOrder runOrder() const = 0;
+        virtual unsigned int rngSeed() const = 0;
+        virtual bool forceColour() const = 0;
     };
 }
 
diff --git a/include/internal/catch_interfaces_reporter.h b/include/internal/catch_interfaces_reporter.h
index 872b65c..5296177 100644
--- a/include/internal/catch_interfaces_reporter.h
+++ b/include/internal/catch_interfaces_reporter.h
@@ -238,11 +238,14 @@
 
         virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
 
+        // The return value indicates if the messages buffer should be cleared:
         virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
         virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
         virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
         virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
         virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
+        
+        virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
     };
 
 
diff --git a/include/internal/catch_interfaces_testcase.h b/include/internal/catch_interfaces_testcase.h
index 21ed3c3..a23ff9f 100644
--- a/include/internal/catch_interfaces_testcase.h
+++ b/include/internal/catch_interfaces_testcase.h
@@ -28,7 +28,7 @@
     struct ITestCaseRegistry {
         virtual ~ITestCaseRegistry();
         virtual std::vector<TestCase> const& getAllTests() const = 0;
-        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases ) const = 0;
+        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const = 0;
 
     };
 }
diff --git a/include/internal/catch_legacy_reporter_adapter.h b/include/internal/catch_legacy_reporter_adapter.h
index fb579c7..72c43d7 100644
--- a/include/internal/catch_legacy_reporter_adapter.h
+++ b/include/internal/catch_legacy_reporter_adapter.h
@@ -50,6 +50,7 @@
         virtual void testCaseEnded( TestCaseStats const& testCaseStats );
         virtual void testGroupEnded( TestGroupStats const& testGroupStats );
         virtual void testRunEnded( TestRunStats const& testRunStats );
+        virtual void skipTest( TestCaseInfo const& );
 
     private:
         Ptr<IReporter> m_legacyReporter;
diff --git a/include/internal/catch_legacy_reporter_adapter.hpp b/include/internal/catch_legacy_reporter_adapter.hpp
index 09f73b2..6034581 100644
--- a/include/internal/catch_legacy_reporter_adapter.hpp
+++ b/include/internal/catch_legacy_reporter_adapter.hpp
@@ -77,6 +77,8 @@
     void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) {
         m_legacyReporter->EndTesting( testRunStats.totals );
     }
+    void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) {
+    }
 }
 
 #endif // TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_H_INCLUDED
diff --git a/include/internal/catch_list.hpp b/include/internal/catch_list.hpp
index 53cd37d..1c510ef 100644
--- a/include/internal/catch_list.hpp
+++ b/include/internal/catch_list.hpp
@@ -23,9 +23,9 @@
 
         TestSpec testSpec = config.testSpec();
         if( config.testSpec().hasFilters() )
-            std::cout << "Matching test cases:\n";
+            Catch::cout() << "Matching test cases:\n";
         else {
-            std::cout << "All available test cases:\n";
+            Catch::cout() << "All available test cases:\n";
             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec();
         }
 
@@ -46,15 +46,15 @@
                 : Colour::None;
             Colour colourGuard( colour );
 
-            std::cout << Text( testCaseInfo.name, nameAttr ) << std::endl;
+            Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl;
             if( !testCaseInfo.tags.empty() )
-                std::cout << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
+                Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
         }
 
         if( !config.testSpec().hasFilters() )
-            std::cout << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
+            Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
         else
-            std::cout << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl;
+            Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl;
         return matchedTests;
     }
 
@@ -70,7 +70,7 @@
                 ++it ) {
             matchedTests++;
             TestCaseInfo const& testCaseInfo = it->getTestCaseInfo();
-            std::cout << testCaseInfo.name << std::endl;
+            Catch::cout() << testCaseInfo.name << std::endl;
         }
         return matchedTests;
     }
@@ -96,9 +96,9 @@
     inline std::size_t listTags( Config const& config ) {
         TestSpec testSpec = config.testSpec();
         if( config.testSpec().hasFilters() )
-            std::cout << "Tags for matching test cases:\n";
+            Catch::cout() << "Tags for matching test cases:\n";
         else {
-            std::cout << "All available tags:\n";
+            Catch::cout() << "All available tags:\n";
             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec();
         }
 
@@ -132,14 +132,14 @@
                                                     .setInitialIndent( 0 )
                                                     .setIndent( oss.str().size() )
                                                     .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) );
-            std::cout << oss.str() << wrapper << "\n";
+            Catch::cout() << oss.str() << wrapper << "\n";
         }
-        std::cout << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl;
+        Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl;
         return tagCounts.size();
     }
 
     inline std::size_t listReporters( Config const& /*config*/ ) {
-        std::cout << "Available reports:\n";
+        Catch::cout() << "Available reporters:\n";
         IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
         IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it;
         std::size_t maxNameLen = 0;
@@ -151,13 +151,13 @@
                                                         .setInitialIndent( 0 )
                                                         .setIndent( 7+maxNameLen )
                                                         .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) );
-            std::cout << "  "
+            Catch::cout() << "  "
                     << it->first
                     << ":"
                     << std::string( maxNameLen - it->first.size() + 2, ' ' )
                     << wrapper << "\n";
         }
-        std::cout << std::endl;
+        Catch::cout() << std::endl;
         return factories.size();
     }
 
diff --git a/include/internal/catch_objc.hpp b/include/internal/catch_objc.hpp
index 88b5ef7..7e315c2 100644
--- a/include/internal/catch_objc.hpp
+++ b/include/internal/catch_objc.hpp
@@ -17,7 +17,7 @@
 // NB. Any general catch headers included here must be included
 // in catch.hpp first to make sure they are included by the single
 // header for non obj-usage
-#include "internal/catch_test_case_info.h"
+#include "catch_test_case_info.h"
 
 ///////////////////////////////////////////////////////////////////////////////
 // This protocol is really only here for (self) documenting purposes, since
diff --git a/include/internal/catch_reenable_warnings.h b/include/internal/catch_reenable_warnings.h
index 07765f4..33574e0 100644
--- a/include/internal/catch_reenable_warnings.h
+++ b/include/internal/catch_reenable_warnings.h
@@ -9,9 +9,13 @@
 #define TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED
 
 #ifdef __clang__
-#pragma clang diagnostic pop
+#    ifdef __ICC // icpc defines the __clang__ macro
+#        pragma warning(pop)
+#    else
+#        pragma clang diagnostic pop
+#    endif
 #elif defined __GNUC__
-#pragma GCC diagnostic pop
+#    pragma GCC diagnostic pop
 #endif
 
 #endif // TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED
diff --git a/include/internal/catch_result_type.h b/include/internal/catch_result_type.h
index ce00ef0..31ad3e6 100644
--- a/include/internal/catch_result_type.h
+++ b/include/internal/catch_result_type.h
@@ -25,7 +25,9 @@
         Exception = 0x100 | FailureBit,
 
         ThrewException = Exception | 1,
-        DidntThrowException = Exception | 2
+        DidntThrowException = Exception | 2,
+
+        FatalErrorCondition = 0x200 | FailureBit
 
     }; };
 
diff --git a/include/internal/catch_runner_impl.hpp b/include/internal/catch_runner_impl.hpp
index fa4f319..e689351 100644
--- a/include/internal/catch_runner_impl.hpp
+++ b/include/internal/catch_runner_impl.hpp
@@ -20,6 +20,7 @@
 #include "catch_test_case_tracker.hpp"
 #include "catch_timer.h"
 #include "catch_result_builder.h"
+#include "catch_fatal_condition.hpp"
 
 #include <set>
 #include <string>
@@ -209,6 +210,37 @@
             return &m_lastResult;
         }
 
+        virtual void handleFatalErrorCondition( std::string const& message ) {
+            ResultBuilder resultBuilder = makeUnexpectedResultBuilder();
+            resultBuilder.setResultType( ResultWas::FatalErrorCondition );
+            resultBuilder << message;
+            resultBuilder.captureExpression();
+
+            handleUnfinishedSections();
+
+            // Recreate section for test case (as we will lose the one that was in scope)
+            TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+            SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description );
+
+            Counts assertions;
+            assertions.failed = 1;
+            SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false );
+            m_reporter->sectionEnded( testCaseSectionStats );
+
+            TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo();
+
+            Totals deltaTotals;
+            deltaTotals.testCases.failed = 1;
+            m_reporter->testCaseEnded( TestCaseStats(   testInfo,
+                                                        deltaTotals,
+                                                        "",
+                                                        "",
+                                                        false ) );
+            m_totals.testCases.failed++;
+            testGroupEnded( "", m_totals, 1, 1 );
+            m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) );
+        }
+
     public:
         // !TBD We need to do this another way!
         bool aborting() const {
@@ -230,12 +262,12 @@
                 Timer timer;
                 timer.start();
                 if( m_reporter->getPreferences().shouldRedirectStdOut ) {
-                    StreamRedirect coutRedir( std::cout, redirectedCout );
-                    StreamRedirect cerrRedir( std::cerr, redirectedCerr );
-                    m_activeTestCase->invoke();
+                    StreamRedirect coutRedir( Catch::cout(), redirectedCout );
+                    StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr );
+                    invokeActiveTestCase();
                 }
                 else {
-                    m_activeTestCase->invoke();
+                    invokeActiveTestCase();
                 }
                 duration = timer.getElapsedSeconds();
             }
@@ -243,20 +275,9 @@
                 // This just means the test was aborted due to failure
             }
             catch(...) {
-                ResultBuilder exResult( m_lastAssertionInfo.macroName.c_str(),
-                                        m_lastAssertionInfo.lineInfo,
-                                        m_lastAssertionInfo.capturedExpression.c_str(),
-                                        m_lastAssertionInfo.resultDisposition );
-                exResult.useActiveException();
+                makeUnexpectedResultBuilder().useActiveException();
             }
-            // If sections ended prematurely due to an exception we stored their
-            // infos here so we can tear them down outside the unwind process.
-            for( std::vector<UnfinishedSections>::const_reverse_iterator it = m_unfinishedSections.rbegin(),
-                        itEnd = m_unfinishedSections.rend();
-                    it != itEnd;
-                    ++it )
-                sectionEnded( it->info, it->prevAssertions, it->durationInSeconds );
-            m_unfinishedSections.clear();
+            handleUnfinishedSections();
             m_messages.clear();
 
             Counts assertions = m_totals.assertions - prevAssertions;
@@ -272,7 +293,32 @@
             m_reporter->sectionEnded( testCaseSectionStats );
         }
 
+        void invokeActiveTestCase() {
+            FatalConditionHandler fatalConditionHandler; // Handle signals
+            m_activeTestCase->invoke();
+            fatalConditionHandler.reset();
+        }
+
     private:
+
+        ResultBuilder makeUnexpectedResultBuilder() const {
+            return ResultBuilder(   m_lastAssertionInfo.macroName.c_str(),
+                                    m_lastAssertionInfo.lineInfo,
+                                    m_lastAssertionInfo.capturedExpression.c_str(),
+                                    m_lastAssertionInfo.resultDisposition );
+        }
+
+        void handleUnfinishedSections() {
+            // If sections ended prematurely due to an exception we stored their
+            // infos here so we can tear them down outside the unwind process.
+            for( std::vector<UnfinishedSections>::const_reverse_iterator it = m_unfinishedSections.rbegin(),
+                        itEnd = m_unfinishedSections.rend();
+                    it != itEnd;
+                    ++it )
+                sectionEnded( it->info, it->prevAssertions, it->durationInSeconds );
+            m_unfinishedSections.clear();
+        }
+
         struct UnfinishedSections {
             UnfinishedSections( SectionInfo const& _info, Counts const& _prevAssertions, double _durationInSeconds )
             : info( _info ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds )
diff --git a/include/internal/catch_section.h b/include/internal/catch_section.h
index f83d828..d8b3ae4 100644
--- a/include/internal/catch_section.h
+++ b/include/internal/catch_section.h
@@ -16,7 +16,7 @@
 
 namespace Catch {
 
-    class Section {
+    class Section : NonCopyable {
     public:
         Section( SectionInfo const& info );
         ~Section();
@@ -25,15 +25,6 @@
         operator bool() const;
 
     private:
-#ifdef CATCH_CPP11_OR_GREATER
-        Section( Section const& )              = delete;
-        Section( Section && )                  = delete;
-        Section& operator = ( Section const& ) = delete;
-        Section& operator = ( Section && )     = delete;
-#else
-        Section( Section const& info );
-        Section& operator = ( Section const& );
-#endif
         SectionInfo m_info;
 
         std::string m_name;
diff --git a/include/internal/catch_stream.h b/include/internal/catch_stream.h
index 70ddb58..402a661 100644
--- a/include/internal/catch_stream.h
+++ b/include/internal/catch_stream.h
@@ -28,6 +28,9 @@
     private:
         bool isOwned;
     };
+
+    std::ostream& cout();
+    std::ostream& cerr();
 }
 
 #endif // TWOBLUECUBES_CATCH_STREAM_H_INCLUDED
diff --git a/include/internal/catch_stream.hpp b/include/internal/catch_stream.hpp
index adfacbf..604ed97 100644
--- a/include/internal/catch_stream.hpp
+++ b/include/internal/catch_stream.hpp
@@ -15,6 +15,7 @@
 
 #include <stdexcept>
 #include <cstdio>
+#include <iostream>
 
 namespace Catch {
 
@@ -78,6 +79,15 @@
             isOwned = false;
         }
     }
+
+#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement this functions
+    std::ostream& cout() {
+        return std::cout;
+    }
+    std::ostream& cerr() {
+        return std::cerr;
+    }
+#endif
 }
 
 #endif // TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED
diff --git a/include/internal/catch_suppress_warnings.h b/include/internal/catch_suppress_warnings.h
index cc36c07..7351f63 100644
--- a/include/internal/catch_suppress_warnings.h
+++ b/include/internal/catch_suppress_warnings.h
@@ -9,19 +9,24 @@
 #define TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED
 
 #ifdef __clang__
-#pragma clang diagnostic ignored "-Wglobal-constructors"
-#pragma clang diagnostic ignored "-Wvariadic-macros"
-#pragma clang diagnostic ignored "-Wc99-extensions"
-#pragma clang diagnostic ignored "-Wunused-variable"
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wpadded"
-#pragma clang diagnostic ignored "-Wc++98-compat"
-#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#   ifdef __ICC // icpc defines the __clang__ macro
+#       pragma warning(push)
+#       pragma warning(disable: 161 1682)
+#   else // __ICC
+#       pragma clang diagnostic ignored "-Wglobal-constructors"
+#       pragma clang diagnostic ignored "-Wvariadic-macros"
+#       pragma clang diagnostic ignored "-Wc99-extensions"
+#       pragma clang diagnostic ignored "-Wunused-variable"
+#       pragma clang diagnostic push
+#       pragma clang diagnostic ignored "-Wpadded"
+#       pragma clang diagnostic ignored "-Wc++98-compat"
+#       pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#    endif
 #elif defined __GNUC__
-#pragma GCC diagnostic ignored "-Wvariadic-macros"
-#pragma GCC diagnostic ignored "-Wunused-variable"
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpadded"
+#    pragma GCC diagnostic ignored "-Wvariadic-macros"
+#    pragma GCC diagnostic ignored "-Wunused-variable"
+#    pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wpadded"
 #endif
 
 #endif // TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED
diff --git a/include/internal/catch_tag_alias_registry.hpp b/include/internal/catch_tag_alias_registry.hpp
index fea7ce9..e5ad11b 100644
--- a/include/internal/catch_tag_alias_registry.hpp
+++ b/include/internal/catch_tag_alias_registry.hpp
@@ -73,7 +73,7 @@
         }
         catch( std::exception& ex ) {
             Colour colourGuard( Colour::Red );
-            std::cerr << ex.what() << std::endl;
+            Catch::cerr() << ex.what() << std::endl;
             exit(1);
         }
     }
diff --git a/include/internal/catch_test_case_info.hpp b/include/internal/catch_test_case_info.hpp
index e3fa1f7..308ddc7 100644
--- a/include/internal/catch_test_case_info.hpp
+++ b/include/internal/catch_test_case_info.hpp
@@ -16,7 +16,7 @@
 namespace Catch {
 
     inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
-        if( tag == "." ||
+        if( startsWith( tag, "." ) ||
             tag == "hide" ||
             tag == "!hide" )
             return TestCaseInfo::IsHidden;
@@ -36,13 +36,13 @@
         if( isReservedTag( tag ) ) {
             {
                 Colour colourGuard( Colour::Red );
-                std::cerr
+                Catch::cerr()
                     << "Tag name [" << tag << "] not allowed.\n"
                     << "Tag names starting with non alpha-numeric characters are reserved\n";
             }
             {
                 Colour colourGuard( Colour::FileName );
-                std::cerr << _lineInfo << std::endl;
+                Catch::cerr() << _lineInfo << std::endl;
             }
             exit(1);
         }
@@ -70,14 +70,15 @@
             }
             else {
                 if( c == ']' ) {
-                    enforceNotReservedTag( tag, _lineInfo );
-
-                    inTag = false;
-                    if( tag == "hide" || tag == "." )
+                    TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag );
+                    if( prop == TestCaseInfo::IsHidden )
                         isHidden = true;
-                    else
-                        tags.insert( tag );
+                    else if( prop == TestCaseInfo::None )
+                        enforceNotReservedTag( tag, _lineInfo );
+
+                    tags.insert( tag );
                     tag.clear();
+                    inTag = false;
                 }
                 else
                     tag += c;
diff --git a/include/internal/catch_test_case_registry_impl.hpp b/include/internal/catch_test_case_registry_impl.hpp
index ecffa2e..21165a3 100644
--- a/include/internal/catch_test_case_registry_impl.hpp
+++ b/include/internal/catch_test_case_registry_impl.hpp
@@ -17,10 +17,18 @@
 #include <set>
 #include <sstream>
 #include <iostream>
+#include <algorithm>
 
 namespace Catch {
 
     class TestRegistry : public ITestCaseRegistry {
+        struct LexSort {
+            bool operator() (TestCase i,TestCase j) const { return (i<j);}
+        };
+        struct RandomNumberGenerator {
+            int operator()( int n ) const { return std::rand() % n; }
+        };
+
     public:
         TestRegistry() : m_unnamedCount( 0 ) {}
         virtual ~TestRegistry();
@@ -43,7 +51,7 @@
                 TestCase const& prev = *m_functions.find( testCase );
                 {
                     Colour colourGuard( Colour::Red );
-                    std::cerr   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n"
+                    Catch::cerr()   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n"
                                 << "\tFirst seen at " << prev.getTestCaseInfo().lineInfo << "\n"
                                 << "\tRedefined at " << testCase.getTestCaseInfo().lineInfo << std::endl;
                 }
@@ -59,18 +67,38 @@
             return m_nonHiddenFunctions;
         }
 
-        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases ) const {
+        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const {
+
             for( std::vector<TestCase>::const_iterator  it = m_functionsInOrder.begin(),
                                                         itEnd = m_functionsInOrder.end();
                     it != itEnd;
                     ++it ) {
-                if( testSpec.matches( *it ) && ( config.allowThrows() || !it->throws() ) )
+                bool includeTest = testSpec.matches( *it ) && ( config.allowThrows() || !it->throws() );
+                if( includeTest != negated )
                     matchingTestCases.push_back( *it );
             }
+            sortTests( config, matchingTestCases );
         }
 
     private:
 
+        static void sortTests( IConfig const& config, std::vector<TestCase>& matchingTestCases ) {
+            
+            switch( config.runOrder() ) {
+                case RunTests::InLexicographicalOrder:
+                    std::sort( matchingTestCases.begin(), matchingTestCases.end(), LexSort() );
+                    break;
+                case RunTests::InRandomOrder:
+                {
+                    RandomNumberGenerator rng;
+                    std::random_shuffle( matchingTestCases.begin(), matchingTestCases.end(), rng );
+                }
+                    break;
+                case RunTests::InDeclarationOrder:
+                    // already in declaration order
+                    break;
+            }
+        }
         std::set<TestCase> m_functions;
         std::vector<TestCase> m_functionsInOrder;
         std::vector<TestCase> m_nonHiddenFunctions;
diff --git a/include/internal/catch_test_registry.hpp b/include/internal/catch_test_registry.hpp
index 73de60b..d12411d 100644
--- a/include/internal/catch_test_registry.hpp
+++ b/include/internal/catch_test_registry.hpp
@@ -10,7 +10,7 @@
 
 #include "catch_common.h"
 #include "catch_interfaces_testcase.h"
-#include "internal/catch_compiler_capabilities.h"
+#include "catch_compiler_capabilities.h"
 
 namespace Catch {
 
diff --git a/include/internal/catch_timer.h b/include/internal/catch_timer.h
index 015f88b..22e9e63 100644
--- a/include/internal/catch_timer.h
+++ b/include/internal/catch_timer.h
@@ -22,7 +22,7 @@
     public:
         Timer() : m_ticks( 0 ) {}
         void start();
-        unsigned int getElapsedNanoseconds() const;
+        unsigned int getElapsedMicroseconds() const;
         unsigned int getElapsedMilliseconds() const;
         double getElapsedSeconds() const;
 
diff --git a/include/internal/catch_timer.hpp b/include/internal/catch_timer.hpp
index b60fa2b..47d9536 100644
--- a/include/internal/catch_timer.hpp
+++ b/include/internal/catch_timer.hpp
@@ -27,11 +27,11 @@
         uint64_t getCurrentTicks() {
             static uint64_t hz=0, hzo=0;
             if (!hz) {
-                QueryPerformanceFrequency((LARGE_INTEGER*)&hz);
-                QueryPerformanceCounter((LARGE_INTEGER*)&hzo);
+                QueryPerformanceFrequency( reinterpret_cast<LARGE_INTEGER*>( &hz ) );
+                QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &hzo ) );
             }
             uint64_t t;
-            QueryPerformanceCounter((LARGE_INTEGER*)&t);
+            QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &t ) );
             return ((t-hzo)*1000000)/hz;
         }
 #else
@@ -46,14 +46,14 @@
     void Timer::start() {
         m_ticks = getCurrentTicks();
     }
-    unsigned int Timer::getElapsedNanoseconds() const {
+    unsigned int Timer::getElapsedMicroseconds() const {
         return static_cast<unsigned int>(getCurrentTicks() - m_ticks);
     }
     unsigned int Timer::getElapsedMilliseconds() const {
-        return static_cast<unsigned int>((getCurrentTicks() - m_ticks)/1000);
+        return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
     }
     double Timer::getElapsedSeconds() const {
-        return (getCurrentTicks() - m_ticks)/1000000.0;
+        return getElapsedMicroseconds()/1000000.0;
     }
 
 } // namespace Catch
diff --git a/include/internal/catch_tostring.h b/include/internal/catch_tostring.h
index e8e3829..8e6e158 100644
--- a/include/internal/catch_tostring.h
+++ b/include/internal/catch_tostring.h
@@ -21,9 +21,50 @@
 #include "catch_objc_arc.hpp"
 #endif
 
+#ifdef CATCH_CPP11_OR_GREATER
+#include <tuple>
+#include <type_traits>
+#endif
+
 namespace Catch {
+
+// Why we're here.
+template<typename T>
+std::string toString( T const& value );
+
+// Built in overloads
+
+std::string toString( std::string const& value );
+std::string toString( std::wstring const& value );
+std::string toString( const char* const value );
+std::string toString( char* const value );
+std::string toString( const wchar_t* const value );
+std::string toString( wchar_t* const value );
+std::string toString( int value );
+std::string toString( unsigned long value );
+std::string toString( unsigned int value );
+std::string toString( const double value );
+std::string toString( const float value );
+std::string toString( bool value );
+std::string toString( char value );
+std::string toString( signed char value );
+std::string toString( unsigned char value );
+
+#ifdef CATCH_CONFIG_CPP11_NULLPTR
+std::string toString( std::nullptr_t );
+#endif
+
+#ifdef __OBJC__
+    std::string toString( NSString const * const& nsstring );
+    std::string toString( NSString * CATCH_ARC_STRONG const& nsstring );
+    std::string toString( NSObject* const& nsObject );
+#endif
+
+  
 namespace Detail {
 
+    extern std::string unprintableString;
+
 // SFINAE is currently disabled by default for all compilers.
 // If the non SFINAE version of IsStreamInsertable is ambiguous for you
 // and your compiler supports SFINAE, try #defining CATCH_CONFIG_SFINAE
@@ -64,10 +105,38 @@
 
 #endif
 
+#if defined(CATCH_CPP11_OR_GREATER)
+    template<typename T,
+             bool IsEnum = std::is_enum<T>::value
+             >
+    struct EnumStringMaker
+    {
+        static std::string convert( T const& ) { return unprintableString; }
+    };
+
+    template<typename T>
+    struct EnumStringMaker<T,true>
+    {
+        static std::string convert( T const& v )
+        {
+            return ::Catch::toString(
+                static_cast<typename std::underlying_type<T>::type>(v)
+                );
+        }
+    };
+#endif
     template<bool C>
     struct StringMakerBase {
+#if defined(CATCH_CPP11_OR_GREATER)
         template<typename T>
-        static std::string convert( T const& ) { return "{?}"; }
+        static std::string convert( T const& v )
+        {
+            return EnumStringMaker<T>::convert( v );
+        }
+#else
+        template<typename T>
+        static std::string convert( T const& ) { return unprintableString; }
+#endif
     };
 
     template<>
@@ -90,9 +159,6 @@
 } // end namespace Detail
 
 template<typename T>
-std::string toString( T const& value );
-
-template<typename T>
 struct StringMaker :
     Detail::StringMakerBase<Detail::IsStreamInsertable<T>::value> {};
 
@@ -122,12 +188,60 @@
     std::string rangeToString( InputIterator first, InputIterator last );
 }
 
+//template<typename T, typename Allocator>
+//struct StringMaker<std::vector<T, Allocator> > {
+//    static std::string convert( std::vector<T,Allocator> const& v ) {
+//        return Detail::rangeToString( v.begin(), v.end() );
+//    }
+//};
+
 template<typename T, typename Allocator>
-struct StringMaker<std::vector<T, Allocator> > {
-    static std::string convert( std::vector<T,Allocator> const& v ) {
-        return Detail::rangeToString( v.begin(), v.end() );
+std::string toString( std::vector<T,Allocator> const& v ) {
+    return Detail::rangeToString( v.begin(), v.end() );
+}
+
+
+#ifdef CATCH_CPP11_OR_GREATER
+
+// toString for tuples
+namespace TupleDetail {
+  template<
+      typename Tuple,
+      std::size_t N = 0,
+      bool = (N < std::tuple_size<Tuple>::value)
+      >
+  struct ElementPrinter {
+      static void print( const Tuple& tuple, std::ostream& os )
+      {
+          os << ( N ? ", " : " " )
+             << Catch::toString(std::get<N>(tuple));
+          ElementPrinter<Tuple,N+1>::print(tuple,os);
+      }
+  };
+
+  template<
+      typename Tuple,
+      std::size_t N
+      >
+  struct ElementPrinter<Tuple,N,false> {
+      static void print( const Tuple&, std::ostream& ) {}
+  };
+
+}
+
+template<typename ...Types>
+struct StringMaker<std::tuple<Types...>> {
+
+    static std::string convert( const std::tuple<Types...>& tuple )
+    {
+        std::ostringstream os;
+        os << '{';
+        TupleDetail::ElementPrinter<std::tuple<Types...>>::print( tuple, os );
+        os << " }";
+        return os.str();
     }
 };
+#endif
 
 namespace Detail {
     template<typename T>
@@ -148,33 +262,6 @@
     return StringMaker<T>::convert( value );
 }
 
-// Built in overloads
-
-std::string toString( std::string const& value );
-std::string toString( std::wstring const& value );
-std::string toString( const char* const value );
-std::string toString( char* const value );
-std::string toString( const wchar_t* const value );
-std::string toString( wchar_t* const value );
-std::string toString( int value );
-std::string toString( unsigned long value );
-std::string toString( unsigned int value );
-std::string toString( const double value );
-std::string toString( const float value );
-std::string toString( bool value );
-std::string toString( char value );
-std::string toString( signed char value );
-std::string toString( unsigned char value );
-
-#ifdef CATCH_CONFIG_CPP11_NULLPTR
-std::string toString( std::nullptr_t );
-#endif
-
-#ifdef __OBJC__
-    std::string toString( NSString const * const& nsstring );
-    std::string toString( NSString * CATCH_ARC_STRONG const& nsstring );
-    std::string toString( NSObject* const& nsObject );
-#endif
 
     namespace Detail {
     template<typename InputIterator>
@@ -182,10 +269,9 @@
         std::ostringstream oss;
         oss << "{ ";
         if( first != last ) {
-            oss << toString( *first );
-            for( ++first ; first != last ; ++first ) {
-                oss << ", " << toString( *first );
-            }
+            oss << Catch::toString( *first );
+            for( ++first ; first != last ; ++first )
+                oss << ", " << Catch::toString( *first );
         }
         oss << " }";
         return oss.str();
diff --git a/include/internal/catch_tostring.hpp b/include/internal/catch_tostring.hpp
index f9369f1..c4b3f15 100644
--- a/include/internal/catch_tostring.hpp
+++ b/include/internal/catch_tostring.hpp
@@ -15,6 +15,8 @@
 
 namespace Detail {
 
+    std::string unprintableString = "{?}";
+
     namespace {
         struct Endianness {
             enum Arch { Big, Little };
@@ -73,7 +75,7 @@
     s.reserve( value.size() );
     for(size_t i = 0; i < value.size(); ++i )
         s += value[i] <= 0xff ? static_cast<char>( value[i] ) : '?';
-    return toString( s );
+    return Catch::toString( s );
 }
 
 std::string toString( const char* const value ) {
@@ -96,7 +98,10 @@
 
 std::string toString( int value ) {
     std::ostringstream oss;
-    oss << value;
+    if( value > 8192 )
+        oss << "0x" << std::hex << value;
+    else
+        oss << value;
     return oss.str();
 }
 
@@ -110,7 +115,7 @@
 }
 
 std::string toString( unsigned int value ) {
-    return toString( static_cast<unsigned long>( value ) );
+    return Catch::toString( static_cast<unsigned long>( value ) );
 }
 
 template<typename T>
diff --git a/include/internal/catch_totals.hpp b/include/internal/catch_totals.hpp
index 75386ae..551e294 100644
--- a/include/internal/catch_totals.hpp
+++ b/include/internal/catch_totals.hpp
@@ -35,6 +35,9 @@
         bool allPassed() const {
             return failed == 0 && failedButOk == 0;
         }
+        bool allOk() const {
+            return failed == 0;
+        }
 
         std::size_t passed;
         std::size_t failed;
diff --git a/include/internal/catch_version.hpp b/include/internal/catch_version.hpp
index db7a7ec..9507b38 100644
--- a/include/internal/catch_version.hpp
+++ b/include/internal/catch_version.hpp
@@ -13,7 +13,7 @@
 namespace Catch {
 
     // These numbers are maintained by a script
-    Version libraryVersion( 1, 0, 53, "master" );
+    Version libraryVersion( 1, 1, 14, "develop" );
 }
 
 #endif // TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED
diff --git a/include/internal/catch_xmlwriter.hpp b/include/internal/catch_xmlwriter.hpp
index 52d66bc..d47c2b4 100644
--- a/include/internal/catch_xmlwriter.hpp
+++ b/include/internal/catch_xmlwriter.hpp
@@ -8,8 +8,9 @@
 #ifndef TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED
 #define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED
 
+#include "../internal/catch_stream.h"
+
 #include <sstream>
-#include <iostream>
 #include <string>
 #include <vector>
 
@@ -52,7 +53,7 @@
         XmlWriter()
         :   m_tagIsOpen( false ),
             m_needsNewline( false ),
-            m_os( &std::cout )
+            m_os( &Catch::cout() )
         {}
 
         XmlWriter( std::ostream& os )
diff --git a/include/reporters/catch_reporter_bases.hpp b/include/reporters/catch_reporter_bases.hpp
index ddbc63b..865dc29 100644
--- a/include/reporters/catch_reporter_bases.hpp
+++ b/include/reporters/catch_reporter_bases.hpp
@@ -10,6 +10,8 @@
 
 #include "../internal/catch_interfaces_reporter.h"
 
+#include <cstring>
+
 namespace Catch {
 
     struct StreamingReporterBase : SharedImpl<IStreamingReporter> {
@@ -42,7 +44,6 @@
         }
         virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) {
             currentTestCaseInfo.reset();
-            assert( m_sectionStack.empty() );
         }
         virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) {
             currentGroupInfo.reset();
@@ -53,6 +54,11 @@
             currentTestRunInfo.reset();
         }
 
+        virtual void skipTest( TestCaseInfo const& ) {
+            // Don't do anything with this by default.
+            // It can optionally be overridden in the derived class.
+        }
+
         Ptr<IConfig> m_config;
         std::ostream& stream;
 
@@ -183,6 +189,8 @@
         }
         virtual void testRunEndedCumulative() = 0;
 
+        virtual void skipTest( TestCaseInfo const& ) {}
+
         Ptr<IConfig> m_config;
         std::ostream& stream;
         std::vector<AssertionStats> m_assertions;
@@ -198,6 +206,16 @@
 
     };
 
+    template<char C>
+    char const* getLineOfChars() {
+        static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
+        if( !*line ) {
+            memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
+            line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
+        }
+        return line;
+    }
+
 } // end namespace Catch
 
 #endif // TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED
diff --git a/include/reporters/catch_reporter_compact.hpp b/include/reporters/catch_reporter_compact.hpp
index 7a6353e..a5a1729 100644
--- a/include/reporters/catch_reporter_compact.hpp
+++ b/include/reporters/catch_reporter_compact.hpp
@@ -109,6 +109,13 @@
                         printExpressionWas();
                         printRemainingMessages();
                         break;
+                    case ResultWas::FatalErrorCondition:
+                        printResultType( Colour::Error, failedString() );
+                        printIssue( "fatal error condition with message:" );
+                        printMessage();
+                        printExpressionWas();
+                        printRemainingMessages();
+                        break;
                     case ResultWas::DidntThrowException:
                         printResultType( Colour::Error, failedString() );
                         printIssue( "expected exception, got none" );
diff --git a/include/reporters/catch_reporter_console.hpp b/include/reporters/catch_reporter_console.hpp
index 7246d32..16896f4 100644
--- a/include/reporters/catch_reporter_console.hpp
+++ b/include/reporters/catch_reporter_console.hpp
@@ -13,8 +13,6 @@
 #include "../internal/catch_reporter_registrars.hpp"
 #include "../internal/catch_console_colour.hpp"
 
-#include <cstring>
-
 namespace Catch {
 
     struct ConsoleReporter : StreamingReporterBase {
@@ -149,6 +147,11 @@
                         passOrFail = "FAILED";
                         messageLabel = "due to unexpected exception with message";
                         break;
+                    case ResultWas::FatalErrorCondition:
+                        colour = Colour::Error;
+                        passOrFail = "FAILED";
+                        messageLabel = "due to a fatal error condition";
+                        break;
                     case ResultWas::DidntThrowException:
                         colour = Colour::Error;
                         passOrFail = "FAILED";
@@ -266,6 +269,9 @@
             stream  << " host application.\n"
                     << "Run with -? for options\n\n";
 
+            if( m_config->rngSeed() != 0 )
+                stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n";
+
             currentTestRunInfo.used = true;
         }
         void lazyPrintGroupInfo() {
@@ -437,15 +443,6 @@
         void printSummaryDivider() {
             stream << getLineOfChars<'-'>() << "\n";
         }
-        template<char C>
-        static char const* getLineOfChars() {
-            static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
-            if( !*line ) {
-                memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
-                line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
-            }
-            return line;
-        }
 
     private:
         bool m_headerPrinted;
diff --git a/include/reporters/catch_reporter_junit.hpp b/include/reporters/catch_reporter_junit.hpp
index 63f7e14..f9524aa 100644
--- a/include/reporters/catch_reporter_junit.hpp
+++ b/include/reporters/catch_reporter_junit.hpp
@@ -135,7 +135,7 @@
                     xml.writeAttribute( "classname", className );
                     xml.writeAttribute( "name", name );
                 }
-                xml.writeAttribute( "time", toString( sectionNode.stats.durationInSeconds ) );
+                xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) );
 
                 writeAssertions( sectionNode );
 
@@ -168,6 +168,7 @@
                 std::string elementName;
                 switch( result.getResultType() ) {
                     case ResultWas::ThrewException:
+                    case ResultWas::FatalErrorCondition:
                         elementName = "error";
                         break;
                     case ResultWas::ExplicitFailure:
diff --git a/include/reporters/catch_reporter_teamcity.hpp b/include/reporters/catch_reporter_teamcity.hpp
new file mode 100644
index 0000000..0647244
--- /dev/null
+++ b/include/reporters/catch_reporter_teamcity.hpp
@@ -0,0 +1,222 @@
+/*
+ *  Created by Phil Nash on 19th December 2014
+ *  Copyright 2014 Two Blue Cubes Ltd. All rights reserved.
+ *
+ *  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 TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED
+#define TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED
+
+// Don't #include any Catch headers here - we can assume they are already
+// included before this header.
+// This is not good practice in general but is necessary in this case so this
+// file can be distributed as a single header that works with the main
+// Catch single header.
+
+#include <cstring>
+
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wpadded"
+#endif
+
+namespace Catch {
+    
+    struct TeamCityReporter : StreamingReporterBase {
+        TeamCityReporter( ReporterConfig const& _config )
+        :   StreamingReporterBase( _config ),
+            m_headerPrintedForThisSection( false )
+        {}
+        
+        static std::string escape( std::string const& str ) {
+            std::string escaped = str;
+            replaceInPlace( escaped, "|", "||" );
+            replaceInPlace( escaped, "'", "|'" );
+            replaceInPlace( escaped, "\n", "|n" );
+            replaceInPlace( escaped, "\r", "|r" );
+            replaceInPlace( escaped, "[", "|[" );
+            replaceInPlace( escaped, "]", "|]" );
+            return escaped;
+        }
+        virtual ~TeamCityReporter();
+
+        static std::string getDescription() {
+            return "Reports test results as TeamCity service messages";
+        }
+        virtual ReporterPreferences getPreferences() const {
+            ReporterPreferences prefs;
+            prefs.shouldRedirectStdOut = true;
+            return prefs;
+        }
+
+        virtual void skipTest( TestCaseInfo const& testInfo ) {
+            stream  << "##teamcity[testIgnored name='"
+                    << escape( testInfo.name ) << "'";
+            if( testInfo.isHidden() )
+                stream << " message='hidden test'";
+            else
+                stream << " message='test skipped because it didn|'t match the test spec'";
+            stream << "]\n";
+        }
+        
+        virtual void noMatchingTestCases( std::string const& /* spec */ ) {}
+        
+        virtual void testGroupStarting( GroupInfo const& groupInfo ) {
+            StreamingReporterBase::testGroupStarting( groupInfo );
+            stream << "##teamcity[testSuiteStarted name='"
+                << escape( groupInfo.name ) << "']\n";
+        }
+        virtual void testGroupEnded( TestGroupStats const& testGroupStats ) {
+            StreamingReporterBase::testGroupEnded( testGroupStats );
+            stream << "##teamcity[testSuiteFinished name='"
+                << escape( testGroupStats.groupInfo.name ) << "']\n";
+        }
+
+        
+        virtual void assertionStarting( AssertionInfo const& ) {
+        }
+        
+        virtual bool assertionEnded( AssertionStats const& assertionStats ) {
+            AssertionResult const& result = assertionStats.assertionResult;
+            if( !result.isOk() ) {
+                
+                std::ostringstream msg;
+                if( !m_headerPrintedForThisSection )
+                    printSectionHeader( msg );
+                m_headerPrintedForThisSection = true;
+                
+                msg << result.getSourceInfo() << "\n";
+                
+                switch( result.getResultType() ) {
+                    case ResultWas::ExpressionFailed:
+                        msg << "expression failed";
+                        break;
+                    case ResultWas::ThrewException:
+                        msg << "unexpected exception";
+                        break;
+                    case ResultWas::FatalErrorCondition:
+                        msg << "fatal error condition";
+                        break;
+                    case ResultWas::DidntThrowException:
+                        msg << "no exception was thrown where one was expected";
+                        break;
+                    case ResultWas::ExplicitFailure:
+                        msg << "explicit failure";
+                        break;
+
+                    // We shouldn't get here because of the isOk() test
+                    case ResultWas::Ok:
+                    case ResultWas::Info:
+                    case ResultWas::Warning:
+
+                    // These cases are here to prevent compiler warnings
+                    case ResultWas::Unknown:
+                    case ResultWas::FailureBit:
+                    case ResultWas::Exception:
+                        CATCH_NOT_IMPLEMENTED;
+                }
+                if( assertionStats.infoMessages.size() == 1 )
+                    msg << " with message:";
+                if( assertionStats.infoMessages.size() > 1 )
+                    msg << " with messages:";
+                for( std::vector<MessageInfo>::const_iterator
+                        it = assertionStats.infoMessages.begin(),
+                        itEnd = assertionStats.infoMessages.end();
+                    it != itEnd;
+                    ++it )
+                    msg << "\n  \"" << it->message << "\"";
+                
+                
+                if( result.hasExpression() ) {
+                    msg <<
+                        "\n  " << result.getExpressionInMacro() << "\n"
+                        "with expansion:\n" <<
+                        "  " << result.getExpandedExpression() << "\n";
+                }
+                
+                stream << "##teamcity[testFailed"
+                    << " name='" << escape( currentTestCaseInfo->name )<< "'"
+                    << " message='" << escape( msg.str() ) << "'"
+                    << "]\n";
+            }
+            return true;
+        }
+        
+        virtual void sectionStarting( SectionInfo const& sectionInfo ) {
+            m_headerPrintedForThisSection = false;
+            StreamingReporterBase::sectionStarting( sectionInfo );
+        }
+
+        virtual void testCaseStarting( TestCaseInfo const& testInfo ) {
+            StreamingReporterBase::testCaseStarting( testInfo );
+            stream << "##teamcity[testStarted name='"
+                << escape( testInfo.name ) << "']\n";
+        }
+        
+        virtual void testCaseEnded( TestCaseStats const& testCaseStats ) {
+            StreamingReporterBase::testCaseEnded( testCaseStats );
+            if( !testCaseStats.stdOut.empty() )
+                stream << "##teamcity[testStdOut name='"
+                    << escape( testCaseStats.testInfo.name )
+                    << "' out='" << escape( testCaseStats.stdOut ) << "']\n";
+            if( !testCaseStats.stdErr.empty() )
+                stream << "##teamcity[testStdErr name='"
+                    << escape( testCaseStats.testInfo.name )
+                    << "' out='" << escape( testCaseStats.stdErr ) << "']\n";
+            stream << "##teamcity[testFinished name='"
+                << escape( testCaseStats.testInfo.name ) << "']\n";
+        }
+
+    private:
+        void printSectionHeader( std::ostream& os ) {
+            assert( !m_sectionStack.empty() );
+
+            if( m_sectionStack.size() > 1 ) {
+                os << getLineOfChars<'-'>() << "\n";
+
+                std::vector<SectionInfo>::const_iterator
+                it = m_sectionStack.begin()+1, // Skip first section (test case)
+                itEnd = m_sectionStack.end();
+                for( ; it != itEnd; ++it )
+                    printHeaderString( os, it->name );
+                os << getLineOfChars<'-'>() << "\n";
+            }
+            
+            SourceLineInfo lineInfo = m_sectionStack.front().lineInfo;
+            
+            if( !lineInfo.empty() )
+                os << lineInfo << "\n";
+            os << getLineOfChars<'.'>() << "\n\n";
+        }
+
+        // if string has a : in first line will set indent to follow it on
+        // subsequent lines
+        void printHeaderString( std::ostream& os, std::string const& _string, std::size_t indent = 0 ) {
+            std::size_t i = _string.find( ": " );
+            if( i != std::string::npos )
+                i+=2;
+            else
+                i = 0;
+            os << Text( _string, TextAttributes()
+                           .setIndent( indent+i)
+                           .setInitialIndent( indent ) ) << "\n";
+        }
+    private:
+        bool m_headerPrintedForThisSection;
+        
+    };
+    
+#ifdef CATCH_IMPL
+    TeamCityReporter::~TeamCityReporter() {}
+#endif
+    
+    INTERNAL_CATCH_REGISTER_REPORTER( "teamcity", TeamCityReporter )
+    
+} // end namespace Catch
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+
+#endif // TWOBLUECUBES_CATCH_REPORTER_TEAMCITY_HPP_INCLUDED
diff --git a/include/reporters/catch_reporter_xml.hpp b/include/reporters/catch_reporter_xml.hpp
index aa2cfed..d8cb1dd 100644
--- a/include/reporters/catch_reporter_xml.hpp
+++ b/include/reporters/catch_reporter_xml.hpp
@@ -13,83 +13,93 @@
 #include "../internal/catch_capture.hpp"
 #include "../internal/catch_reporter_registrars.hpp"
 #include "../internal/catch_xmlwriter.hpp"
+#include "../internal/catch_timer.h"
 
 namespace Catch {
-    class XmlReporter : public SharedImpl<IReporter> {
+    class XmlReporter : public StreamingReporterBase {
     public:
-        XmlReporter( ReporterConfig const& config ) : m_config( config ), m_sectionDepth( 0 ) {}
+        XmlReporter( ReporterConfig const& _config )
+        :   StreamingReporterBase( _config ),
+            m_sectionDepth( 0 )
+        {}
 
+        virtual ~XmlReporter();
+        
         static std::string getDescription() {
             return "Reports test results as an XML document";
         }
-        virtual ~XmlReporter();
 
-    private: // IReporter
-
-        virtual bool shouldRedirectStdout() const {
-            return true;
+    public: // StreamingReporterBase
+        virtual ReporterPreferences getPreferences() const {
+            ReporterPreferences prefs;
+            prefs.shouldRedirectStdOut = true;
+            return prefs;
         }
 
-        virtual void StartTesting() {
-            m_xml.setStream( m_config.stream() );
+        virtual void noMatchingTestCases( std::string const& s ) {
+            StreamingReporterBase::noMatchingTestCases( s );
+        }
+
+        virtual void testRunStarting( TestRunInfo const& testInfo ) {
+            StreamingReporterBase::testRunStarting( testInfo );
+            m_xml.setStream( stream );
             m_xml.startElement( "Catch" );
-            if( !m_config.fullConfig()->name().empty() )
-                m_xml.writeAttribute( "name", m_config.fullConfig()->name() );
+            if( !m_config->name().empty() )
+                m_xml.writeAttribute( "name", m_config->name() );
         }
 
-        virtual void EndTesting( const Totals& totals ) {
-            m_xml.scopedElement( "OverallResults" )
-                .writeAttribute( "successes", totals.assertions.passed )
-                .writeAttribute( "failures", totals.assertions.failed )
-                .writeAttribute( "expectedFailures", totals.assertions.failedButOk );
-            m_xml.endElement();
-        }
-
-        virtual void StartGroup( const std::string& groupName ) {
+        virtual void testGroupStarting( GroupInfo const& groupInfo ) {
+            StreamingReporterBase::testGroupStarting( groupInfo );
             m_xml.startElement( "Group" )
-                .writeAttribute( "name", groupName );
+                .writeAttribute( "name", groupInfo.name );
         }
 
-        virtual void EndGroup( const std::string&, const Totals& totals ) {
-            m_xml.scopedElement( "OverallResults" )
-                .writeAttribute( "successes", totals.assertions.passed )
-                .writeAttribute( "failures", totals.assertions.failed )
-                .writeAttribute( "expectedFailures", totals.assertions.failedButOk );
-            m_xml.endElement();
+        virtual void testCaseStarting( TestCaseInfo const& testInfo ) {
+            StreamingReporterBase::testCaseStarting(testInfo);
+            m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
+
+            if ( m_config->showDurations() == ShowDurations::Always )
+                m_testCaseTimer.start();
         }
 
-        virtual void StartSection( const std::string& sectionName, const std::string& description ) {
+        virtual void sectionStarting( SectionInfo const& sectionInfo ) {
+            StreamingReporterBase::sectionStarting( sectionInfo );
             if( m_sectionDepth++ > 0 ) {
                 m_xml.startElement( "Section" )
-                    .writeAttribute( "name", trim( sectionName ) )
-                    .writeAttribute( "description", description );
-            }
-        }
-        virtual void NoAssertionsInSection( const std::string& ) {}
-        virtual void NoAssertionsInTestCase( const std::string& ) {}
-
-        virtual void EndSection( const std::string& /*sectionName*/, const Counts& assertions ) {
-            if( --m_sectionDepth > 0 ) {
-                m_xml.scopedElement( "OverallResults" )
-                    .writeAttribute( "successes", assertions.passed )
-                    .writeAttribute( "failures", assertions.failed )
-                    .writeAttribute( "expectedFailures", assertions.failedButOk );
-                m_xml.endElement();
+                    .writeAttribute( "name", trim( sectionInfo.name ) )
+                    .writeAttribute( "description", sectionInfo.description );
             }
         }
 
-        virtual void StartTestCase( const Catch::TestCaseInfo& testInfo ) {
-            m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
-            m_currentTestSuccess = true;
-        }
+        virtual void assertionStarting( AssertionInfo const& ) { }
 
-        virtual void Result( const Catch::AssertionResult& assertionResult ) {
-            if( !m_config.fullConfig()->includeSuccessfulResults() && assertionResult.getResultType() == ResultWas::Ok )
-                return;
+        virtual bool assertionEnded( AssertionStats const& assertionStats ) {
+            const AssertionResult& assertionResult = assertionStats.assertionResult;
+                
+            // Print any info messages in <Info> tags.
+            if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) {
+                for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end();
+                        it != itEnd;
+                        ++it ) {
+                    if( it->type == ResultWas::Info ) {
+                        m_xml.scopedElement( "Info" )
+                            .writeText( it->message );
+                    } else if ( it->type == ResultWas::Warning ) {
+                        m_xml.scopedElement( "Warning" )
+                            .writeText( it->message );
+                    }
+                }
+            }
 
+            // Drop out if result was successful but we're not printing them.
+            if( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) )
+                return true;
+
+            // Print the expression if there is one.
             if( assertionResult.hasExpression() ) {
                 m_xml.startElement( "Expression" )
                     .writeAttribute( "success", assertionResult.succeeded() )
+					.writeAttribute( "type", assertionResult.getTestMacroName() )
                     .writeAttribute( "filename", assertionResult.getSourceInfo().file )
                     .writeAttribute( "line", assertionResult.getSourceInfo().line );
 
@@ -97,58 +107,96 @@
                     .writeText( assertionResult.getExpression() );
                 m_xml.scopedElement( "Expanded" )
                     .writeText( assertionResult.getExpandedExpression() );
-                m_currentTestSuccess &= assertionResult.succeeded();
             }
 
+            // And... Print a result applicable to each result type.
             switch( assertionResult.getResultType() ) {
                 case ResultWas::ThrewException:
                     m_xml.scopedElement( "Exception" )
                         .writeAttribute( "filename", assertionResult.getSourceInfo().file )
                         .writeAttribute( "line", assertionResult.getSourceInfo().line )
                         .writeText( assertionResult.getMessage() );
-                    m_currentTestSuccess = false;
+                    break;
+                case ResultWas::FatalErrorCondition:
+                    m_xml.scopedElement( "Fatal Error Condition" )
+                        .writeAttribute( "filename", assertionResult.getSourceInfo().file )
+                        .writeAttribute( "line", assertionResult.getSourceInfo().line )
+                        .writeText( assertionResult.getMessage() );
                     break;
                 case ResultWas::Info:
                     m_xml.scopedElement( "Info" )
                         .writeText( assertionResult.getMessage() );
                     break;
                 case ResultWas::Warning:
-                    m_xml.scopedElement( "Warning" )
-                        .writeText( assertionResult.getMessage() );
+                    // Warning will already have been written
                     break;
                 case ResultWas::ExplicitFailure:
                     m_xml.scopedElement( "Failure" )
                         .writeText( assertionResult.getMessage() );
-                    m_currentTestSuccess = false;
                     break;
-                case ResultWas::Unknown:
-                case ResultWas::Ok:
-                case ResultWas::FailureBit:
-                case ResultWas::ExpressionFailed:
-                case ResultWas::Exception:
-                case ResultWas::DidntThrowException:
+                default:
                     break;
             }
+            
             if( assertionResult.hasExpression() )
                 m_xml.endElement();
+                
+            return true;
         }
 
-        virtual void Aborted() {
-            // !TBD
+        virtual void sectionEnded( SectionStats const& sectionStats ) {
+            StreamingReporterBase::sectionEnded( sectionStats );
+            if( --m_sectionDepth > 0 ) {
+                XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
+                e.writeAttribute( "successes", sectionStats.assertions.passed );
+                e.writeAttribute( "failures", sectionStats.assertions.failed );
+                e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk );
+
+                if ( m_config->showDurations() == ShowDurations::Always )
+                    e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds );
+
+                m_xml.endElement();
+            }
         }
 
-        virtual void EndTestCase( const Catch::TestCaseInfo&, const Totals&, const std::string&, const std::string& ) {
-            m_xml.scopedElement( "OverallResult" ).writeAttribute( "success", m_currentTestSuccess );
+        virtual void testCaseEnded( TestCaseStats const& testCaseStats ) {
+            StreamingReporterBase::testCaseEnded( testCaseStats );
+            XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
+            e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
+
+            if ( m_config->showDurations() == ShowDurations::Always )
+                e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() );
+
+            m_xml.endElement();
+        }
+
+        virtual void testGroupEnded( TestGroupStats const& testGroupStats ) {
+            StreamingReporterBase::testGroupEnded( testGroupStats );
+            // TODO: Check testGroupStats.aborting and act accordingly.
+            m_xml.scopedElement( "OverallResults" )
+                .writeAttribute( "successes", testGroupStats.totals.assertions.passed )
+                .writeAttribute( "failures", testGroupStats.totals.assertions.failed )
+                .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk );
+            m_xml.endElement();
+        }
+        
+        virtual void testRunEnded( TestRunStats const& testRunStats ) {
+            StreamingReporterBase::testRunEnded( testRunStats );
+            m_xml.scopedElement( "OverallResults" )
+                .writeAttribute( "successes", testRunStats.totals.assertions.passed )
+                .writeAttribute( "failures", testRunStats.totals.assertions.failed )
+                .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk );
             m_xml.endElement();
         }
 
     private:
-        ReporterConfig m_config;
-        bool m_currentTestSuccess;
+        Timer m_testCaseTimer;
         XmlWriter m_xml;
         int m_sectionDepth;
     };
 
+     INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter )
+
 } // end namespace Catch
 
 #endif // TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED
diff --git a/projects/CMake/CMakeLists.txt b/projects/CMake/CMakeLists.txt
index c31ec32..240e1eb 100644
--- a/projects/CMake/CMakeLists.txt
+++ b/projects/CMake/CMakeLists.txt
@@ -6,6 +6,11 @@
 get_filename_component(CATCH_DIR "${CMAKE_CURRENT_SOURCE_DIR}" PATH)
 get_filename_component(CATCH_DIR "${CATCH_DIR}" PATH)
 set(SELF_TEST_DIR ${CATCH_DIR}/projects/SelfTest)
+if(USE_CPP11)
+  ## We can't turn this on by default, since it breaks on travis
+  message(STATUS "Enabling C++11")
+  set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
+endif()
 
 # define the sources of the self test
 set(SOURCES
@@ -21,6 +26,11 @@
     ${SELF_TEST_DIR}/TestMain.cpp
     ${SELF_TEST_DIR}/TrickyTests.cpp
     ${SELF_TEST_DIR}/VariadicMacrosTests.cpp
+    ${SELF_TEST_DIR}/EnumToString.cpp
+    ${SELF_TEST_DIR}/ToStringPair.cpp
+    ${SELF_TEST_DIR}/ToStringVector.cpp
+    ${SELF_TEST_DIR}/ToStringWhich.cpp
+    ${SELF_TEST_DIR}/ToStringTuple.cpp
 )
 
 # configure the executable
diff --git a/projects/SelfTest/Baselines/console.std.approved.txt b/projects/SelfTest/Baselines/console.std.approved.txt
index 3b67d50..16b9b0a 100644
--- a/projects/SelfTest/Baselines/console.std.approved.txt
+++ b/projects/SelfTest/Baselines/console.std.approved.txt
@@ -1,6 +1,6 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-CatchSelfTest is a <version> host application.
+CatchSelfTest is a <version> (develop) host application.
 Run with -? for options
 
 -------------------------------------------------------------------------------
@@ -737,7 +737,7 @@
 hello
 hello
 -------------------------------------------------------------------------------
-Where the is more to the expression after the RHS[failing]
+Where there is more to the expression after the RHS
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -748,7 +748,7 @@
   error
 
 -------------------------------------------------------------------------------
-Where the LHS is not a simple value[failing]
+Where the LHS is not a simple value
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -759,7 +759,7 @@
   error
 
 -------------------------------------------------------------------------------
-A failing expression with a non streamable type is still captured[failing]
+A failing expression with a non streamable type is still captured
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -775,7 +775,7 @@
   {?} == {?}
 
 -------------------------------------------------------------------------------
-string literals of different sizes can be compared[failing]
+string literals of different sizes can be compared
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -786,6 +786,6 @@
   "first" == "second"
 
 ===============================================================================
-test cases: 130 |  91 passed | 38 failed |  1 failed as expected
-assertions: 709 | 617 passed | 79 failed | 13 failed as expected
+test cases: 155 | 116 passed | 38 failed |  1 failed as expected
+assertions: 765 | 673 passed | 79 failed | 13 failed as expected
 
diff --git a/projects/SelfTest/Baselines/console.sw.approved.txt b/projects/SelfTest/Baselines/console.sw.approved.txt
index d7bd823..e254c3c 100644
--- a/projects/SelfTest/Baselines/console.sw.approved.txt
+++ b/projects/SelfTest/Baselines/console.sw.approved.txt
@@ -1,9 +1,89 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-CatchSelfTest is a <version> host application.
+CatchSelfTest is a <version> (develop) host application.
 Run with -? for options
 
 -------------------------------------------------------------------------------
+toString(enum)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+toString(enum w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2{0}" )
+with expansion:
+  "E2{0}" == "E2{0}"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2{1}" )
+with expansion:
+  "E2{1}" == "E2{1}"
+
+-------------------------------------------------------------------------------
+toString(enum class)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+toString(enum class w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2/V0" )
+with expansion:
+  "E2/V0" == "E2/V0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2/V1" )
+with expansion:
+  "E2/V1" == "E2/V1"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e3) == "Unknown enum value 10" )
+with expansion:
+  "Unknown enum value 10"
+  ==
+  "Unknown enum value 10"
+
+-------------------------------------------------------------------------------
 Some simple comparisons between doubles
 -------------------------------------------------------------------------------
 ApproxTests.cpp:<line number>
@@ -3318,7 +3398,7 @@
 PASSED:
   REQUIRE( Factorial(10) == 3628800 )
 with expansion:
-  0x<hex digits> == 3628800
+  0x<hex digits> == 0x<hex digits>
 
 -------------------------------------------------------------------------------
 An empty test with no assertions
@@ -3986,6 +4066,42 @@
   true == true
 
 -------------------------------------------------------------------------------
+Process can be configured on command line
+  force-colour
+  --force-colour
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( config.forceColour )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
+Process can be configured on command line
+  force-colour
+  without --force-colour
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_NOTHROW( parseIntoConfig( argv, config ) )
+
+TestMain.cpp:<line number>:
+PASSED:
+  REQUIRE( !config.forceColour )
+with expansion:
+  true
+
+-------------------------------------------------------------------------------
 Long strings can be wrapped
   plain string
   No wrapping
@@ -4438,6 +4554,139 @@
           five
           six"
 
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace single char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "b", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "azcdefcg" )
+with expansion:
+  "azcdefcg" == "azcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace two chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "c", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "abzdefzg" )
+with expansion:
+  "abzdefzg" == "abzdefzg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace first char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "a", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "zbcdefcg" )
+with expansion:
+  "zbcdefcg" == "zbcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace last char
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, "g", "z" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "abcdefcz" )
+with expansion:
+  "abcdefcz" == "abcdefcz"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace all chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( letters, letters, "replaced" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == "replaced" )
+with expansion:
+  "replaced" == "replaced"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  replace no chars
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK_FALSE( replaceInPlace( letters, "x", "z" ) )
+with expansion:
+  !false
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( letters == letters )
+with expansion:
+  "abcdefcg" == "abcdefcg"
+
+-------------------------------------------------------------------------------
+replaceInPlace
+  escape '
+-------------------------------------------------------------------------------
+TestMain.cpp:<line number>
+...............................................................................
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( replaceInPlace( s, "'", "|'" ) )
+with expansion:
+  true
+
+TestMain.cpp:<line number>:
+PASSED:
+  CHECK( s == "didn|'t" )
+with expansion:
+  "didn|'t" == "didn|'t"
+
 hello
 hello
 -------------------------------------------------------------------------------
@@ -5496,7 +5745,7 @@
   std::pair( 1, 2 ) == std::pair( 1, 2 )
 
 -------------------------------------------------------------------------------
-Where the is more to the expression after the RHS[failing]
+Where there is more to the expression after the RHS
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -5507,10 +5756,10 @@
   error
 
 
-No assertions in test case 'Where the is more to the expression after the RHS[failing]'
+No assertions in test case 'Where there is more to the expression after the RHS'
 
 -------------------------------------------------------------------------------
-Where the LHS is not a simple value[failing]
+Where the LHS is not a simple value
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -5521,10 +5770,10 @@
   error
 
 
-No assertions in test case 'Where the LHS is not a simple value[failing]'
+No assertions in test case 'Where the LHS is not a simple value'
 
 -------------------------------------------------------------------------------
-A failing expression with a non streamable type is still captured[failing]
+A failing expression with a non streamable type is still captured
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -5540,7 +5789,7 @@
   {?} == {?}
 
 -------------------------------------------------------------------------------
-string literals of different sizes can be compared[failing]
+string literals of different sizes can be compared
 -------------------------------------------------------------------------------
 TrickyTests.cpp:<line number>
 ...............................................................................
@@ -5906,6 +6155,234 @@
 PASSED:
 
 -------------------------------------------------------------------------------
+toString( has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "toString( has_toString )" )
+with expansion:
+  "toString( has_toString )"
+  ==
+  "toString( has_toString )"
+
+-------------------------------------------------------------------------------
+toString( has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" )
+with expansion:
+  "StringMaker<has_maker>"
+  ==
+  "StringMaker<has_maker>"
+
+-------------------------------------------------------------------------------
+toString( has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" )
+with expansion:
+  "toString( has_maker_and_toString )"
+  ==
+  "toString( has_maker_and_toString )"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ {?} }" )
+with expansion:
+  "{ {?} }" == "{ {?} }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" )
+with expansion:
+  "{ StringMaker<has_maker> }"
+  ==
+  "{ StringMaker<has_maker> }"
+
+-------------------------------------------------------------------------------
+toString( vectors<has_maker_and_toString )
+-------------------------------------------------------------------------------
+ToStringWhich.cpp:<line number>
+...............................................................................
+
+ToStringWhich.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" )
+with expansion:
+  "{ StringMaker<has_maker_and_toString> }"
+  ==
+  "{ StringMaker<has_maker_and_toString> }"
+
+-------------------------------------------------------------------------------
+std::pair<int,std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" )
+with expansion:
+  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::pair<int,const std::string> -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" )
+with expansion:
+  "{ 34, "xyzzy" }" == "{ 34, "xyzzy" }"
+
+-------------------------------------------------------------------------------
+std::vector<std::pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" )
+with expansion:
+  "{ { "green", 55 } }"
+  ==
+  "{ { "green", 55 } }"
+
+-------------------------------------------------------------------------------
+pair<pair<int,const char *,pair<std::string,int> > -> toString
+-------------------------------------------------------------------------------
+ToStringPair.cpp:<line number>
+...............................................................................
+
+ToStringPair.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" )
+with expansion:
+  "{ { 42, "Arthur" }, { "Ford", 24 } }"
+  ==
+  "{ { 42, "Arthur" }, { "Ford", 24 } }"
+
+-------------------------------------------------------------------------------
+vector<int> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+  "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42, 512 }" )
+with expansion:
+  "{ 42, 512 }" == "{ 42, 512 }"
+
+-------------------------------------------------------------------------------
+vector<string> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ \"hello\" }" )
+with expansion:
+  "{ "hello" }" == "{ "hello" }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" )
+with expansion:
+  "{ "hello", "world" }"
+  ==
+  "{ "hello", "world" }"
+
+-------------------------------------------------------------------------------
+vector<int,allocator> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42 }" )
+with expansion:
+  "{ 42 }" == "{ 42 }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(vv) == "{ 42, 512 }" )
+with expansion:
+  "{ 42, 512 }" == "{ 42, 512 }"
+
+-------------------------------------------------------------------------------
+vec<vec<string,alloc>> -> toString
+-------------------------------------------------------------------------------
+ToStringVector.cpp:<line number>
+...............................................................................
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(v) == "{  }" )
+with expansion:
+  "{  }" == "{  }"
+
+ToStringVector.cpp:<line number>:
+PASSED:
+  REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" )
+with expansion:
+  "{ { "hello" }, { "world" } }"
+  ==
+  "{ { "hello" }, { "world" } }"
+
+-------------------------------------------------------------------------------
 Parse test names and tags
   Empty test spec should have no filters
 -------------------------------------------------------------------------------
@@ -6933,6 +7410,96 @@
   true == true
 
 -------------------------------------------------------------------------------
+tuple<>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ }" == Catch::toString(type{}) )
+with expansion:
+  "{ }" == "{ }"
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ }" == Catch::toString(value) )
+with expansion:
+  "{ }" == "{ }"
+
+-------------------------------------------------------------------------------
+tuple<int>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ 0 }" == Catch::toString(type{0}) )
+with expansion:
+  "{ 0 }" == "{ 0 }"
+
+-------------------------------------------------------------------------------
+tuple<float,int>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "1.2f" == Catch::toString(float(1.2)) )
+with expansion:
+  "1.2f" == "1.2f"
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) )
+with expansion:
+  "{ 1.2f, 0 }" == "{ 1.2f, 0 }"
+
+-------------------------------------------------------------------------------
+tuple<string,string>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) )
+with expansion:
+  "{ "hello", "world" }"
+  ==
+  "{ "hello", "world" }"
+
+-------------------------------------------------------------------------------
+tuple<tuple<int>,tuple<>,float>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) )
+with expansion:
+  "{ { 42 }, { }, 1.2f }"
+  ==
+  "{ { 42 }, { }, 1.2f }"
+
+-------------------------------------------------------------------------------
+tuple<nullptr,int,const char *>
+-------------------------------------------------------------------------------
+ToStringTuple.cpp:<line number>
+...............................................................................
+
+ToStringTuple.cpp:<line number>:
+PASSED:
+  CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) )
+with expansion:
+  "{ nullptr, 42, "Catch me" }"
+  ==
+  "{ nullptr, 42, "Catch me" }"
+
+-------------------------------------------------------------------------------
 Tag alias can be registered against tag patterns
   The same tag alias can only be registered once
 -------------------------------------------------------------------------------
@@ -7375,6 +7942,6 @@
   true
 
 ===============================================================================
-test cases: 130 |  75 passed | 54 failed |  1 failed as expected
-assertions: 729 | 617 passed | 99 failed | 13 failed as expected
+test cases: 155 | 100 passed | 54 failed |  1 failed as expected
+assertions: 785 | 673 passed | 99 failed | 13 failed as expected
 
diff --git a/projects/SelfTest/Baselines/console.swa4.approved.txt b/projects/SelfTest/Baselines/console.swa4.approved.txt
index ac06c1c..c899301 100644
--- a/projects/SelfTest/Baselines/console.swa4.approved.txt
+++ b/projects/SelfTest/Baselines/console.swa4.approved.txt
@@ -1,9 +1,89 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-CatchSelfTest is a <version> host application.
+CatchSelfTest is a <version> (develop) host application.
 Run with -? for options
 
 -------------------------------------------------------------------------------
+toString(enum)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+toString(enum w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2{0}" )
+with expansion:
+  "E2{0}" == "E2{0}"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2{1}" )
+with expansion:
+  "E2{1}" == "E2{1}"
+
+-------------------------------------------------------------------------------
+toString(enum class)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "0" )
+with expansion:
+  "0" == "0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "1" )
+with expansion:
+  "1" == "1"
+
+-------------------------------------------------------------------------------
+toString(enum class w/operator<<)
+-------------------------------------------------------------------------------
+EnumToString.cpp:<line number>
+...............................................................................
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e0) == "E2/V0" )
+with expansion:
+  "E2/V0" == "E2/V0"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e1) == "E2/V1" )
+with expansion:
+  "E2/V1" == "E2/V1"
+
+EnumToString.cpp:<line number>:
+PASSED:
+  CHECK( Catch::toString(e3) == "Unknown enum value 10" )
+with expansion:
+  "Unknown enum value 10"
+  ==
+  "Unknown enum value 10"
+
+-------------------------------------------------------------------------------
 Some simple comparisons between doubles
 -------------------------------------------------------------------------------
 ApproxTests.cpp:<line number>
@@ -406,6 +486,6 @@
   9.1f != Approx( 9.1000003815 )
 
 ===============================================================================
-test cases: 15 | 11 passed | 3 failed | 1 failed as expected
-assertions: 53 | 47 passed | 4 failed | 2 failed as expected
+test cases: 19 | 15 passed | 3 failed | 1 failed as expected
+assertions: 62 | 56 passed | 4 failed | 2 failed as expected
 
diff --git a/projects/SelfTest/Baselines/junit.sw.approved.txt b/projects/SelfTest/Baselines/junit.sw.approved.txt
index d0e2985..48b8467 100644
--- a/projects/SelfTest/Baselines/junit.sw.approved.txt
+++ b/projects/SelfTest/Baselines/junit.sw.approved.txt
@@ -1,5 +1,9 @@
 <testsuites>
-  <testsuite name="all tests" errors="12" failures="87" tests="729" hostname="tbd" time="{duration}" timestamp="tbd">
+  <testsuite name="all tests" errors="12" failures="87" tests="785" hostname="tbd" time="{duration}" timestamp="tbd">
+    <testcase classname="global" name="toString(enum)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum w/operator&lt;&lt;)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum class)" time="{duration}"/>
+    <testcase classname="global" name="toString(enum class w/operator&lt;&lt;)" time="{duration}"/>
     <testcase classname="global" name="Some simple comparisons between doubles" time="{duration}"/>
     <testcase classname="global" name="Approximate comparisons with different epsilons" time="{duration}"/>
     <testcase classname="global" name="Approximate comparisons with floats" time="{duration}"/>
@@ -469,6 +473,8 @@
     <testcase classname="Process can be configured on command line" name="output filename/-o filename" time="{duration}"/>
     <testcase classname="Process can be configured on command line" name="output filename/--out" time="{duration}"/>
     <testcase classname="Process can be configured on command line" name="combinations/Single character flags can be combined" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="force-colour/--force-colour" time="{duration}"/>
+    <testcase classname="Process can be configured on command line" name="force-colour/without --force-colour" time="{duration}"/>
     <testcase classname="Long strings can be wrapped" name="plain string/No wrapping" time="{duration}"/>
     <testcase classname="Long strings can be wrapped" name="plain string/Wrapped once" time="{duration}"/>
     <testcase classname="Long strings can be wrapped" name="plain string/Wrapped twice" time="{duration}"/>
@@ -481,6 +487,13 @@
     <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped once" time="{duration}"/>
     <testcase classname="Long strings can be wrapped" name="With newlines/Wrapped twice" time="{duration}"/>
     <testcase classname="Long strings can be wrapped" name="With tabs" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace single char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace two chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace first char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace last char" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace all chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="replace no chars" time="{duration}"/>
+    <testcase classname="replaceInPlace" name="escape '" time="{duration}"/>
     <testcase classname="global" name="Strings can be rendered with colour" time="{duration}">
       <system-out>
 hello
@@ -490,9 +503,9 @@
     <testcase classname="global" name="Text can be formatted using the Text class" time="{duration}"/>
     <testcase classname="global" name="Long text is truncted" time="{duration}"/>
     <testcase classname="global" name="Parsing a std::pair" time="{duration}"/>
-    <testcase classname="global" name="Where the is more to the expression after the RHS[failing]" time="{duration}"/>
-    <testcase classname="global" name="Where the LHS is not a simple value[failing]" time="{duration}"/>
-    <testcase classname="global" name="A failing expression with a non streamable type is still captured[failing]" time="{duration}">
+    <testcase classname="global" name="Where there is more to the expression after the RHS" time="{duration}"/>
+    <testcase classname="global" name="Where the LHS is not a simple value" time="{duration}"/>
+    <testcase classname="global" name="A failing expression with a non streamable type is still captured" time="{duration}">
       <failure message="0x<hex digits> == 0x<hex digits>" type="CHECK">
 TrickyTests.cpp:<line number>
       </failure>
@@ -500,7 +513,7 @@
 TrickyTests.cpp:<line number>
       </failure>
     </testcase>
-    <testcase classname="global" name="string literals of different sizes can be compared[failing]" time="{duration}">
+    <testcase classname="global" name="string literals of different sizes can be compared" time="{duration}">
       <failure message="&quot;first&quot; == &quot;second&quot;" type="REQUIRE">
 TrickyTests.cpp:<line number>
       </failure>
@@ -529,6 +542,20 @@
     <testcase classname="global" name="X/level/0/b" time="{duration}"/>
     <testcase classname="global" name="X/level/1/a" time="{duration}"/>
     <testcase classname="global" name="X/level/1/b" time="{duration}"/>
+    <testcase classname="global" name="toString( has_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( has_maker )" time="{duration}"/>
+    <testcase classname="global" name="toString( has_maker_and_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_toString )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_maker )" time="{duration}"/>
+    <testcase classname="global" name="toString( vectors&lt;has_maker_and_toString )" time="{duration}"/>
+    <testcase classname="global" name="std::pair&lt;int,std::string> -> toString" time="{duration}"/>
+    <testcase classname="global" name="std::pair&lt;int,const std::string> -> toString" time="{duration}"/>
+    <testcase classname="global" name="std::vector&lt;std::pair&lt;std::string,int> > -> toString" time="{duration}"/>
+    <testcase classname="global" name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;int> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;string> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vector&lt;int,allocator> -> toString" time="{duration}"/>
+    <testcase classname="global" name="vec&lt;vec&lt;string,alloc>> -> toString" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Empty test spec should have no filters" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Test spec from empty string should have no filters" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="Test spec from just a comma should have no filters" time="{duration}"/>
@@ -560,6 +587,12 @@
     <testcase classname="Parse test names and tags" name="empty tag" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="empty quoted name" time="{duration}"/>
     <testcase classname="Parse test names and tags" name="quoted string followed by tag exclusion" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;int>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;float,int>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;string,string>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>" time="{duration}"/>
+    <testcase classname="global" name="tuple&lt;nullptr,int,const char *>" time="{duration}"/>
     <testcase classname="Tag alias can be registered against tag patterns" name="The same tag alias can only be registered once" time="{duration}"/>
     <testcase classname="Tag alias can be registered against tag patterns" name="Tag aliases must be of the form [@name]" time="{duration}"/>
     <testcase classname="global" name="Anonymous test case 1" time="{duration}"/>
diff --git a/projects/SelfTest/Baselines/xml.sw.approved.txt b/projects/SelfTest/Baselines/xml.sw.approved.txt
index 498f899..4d14a67 100644
--- a/projects/SelfTest/Baselines/xml.sw.approved.txt
+++ b/projects/SelfTest/Baselines/xml.sw.approved.txt
@@ -1,7 +1,93 @@
 <Catch name="CatchSelfTest">
   <Group name="all tests">
+    <TestCase name="toString(enum)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == &quot;0&quot;
+        </Original>
+        <Expanded>
+          &quot;0&quot; == &quot;0&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == &quot;1&quot;
+        </Original>
+        <Expanded>
+          &quot;1&quot; == &quot;1&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum w/operator&lt;&lt;)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == &quot;E2{0}&quot;
+        </Original>
+        <Expanded>
+          &quot;E2{0}&quot; == &quot;E2{0}&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == &quot;E2{1}&quot;
+        </Original>
+        <Expanded>
+          &quot;E2{1}&quot; == &quot;E2{1}&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum class)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == &quot;0&quot;
+        </Original>
+        <Expanded>
+          &quot;0&quot; == &quot;0&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == &quot;1&quot;
+        </Original>
+        <Expanded>
+          &quot;1&quot; == &quot;1&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString(enum class w/operator&lt;&lt;)">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e0) == &quot;E2/V0&quot;
+        </Original>
+        <Expanded>
+          &quot;E2/V0&quot; == &quot;E2/V0&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e1) == &quot;E2/V1&quot;
+        </Original>
+        <Expanded>
+          &quot;E2/V1&quot; == &quot;E2/V1&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/EnumToString.cpp" >
+        <Original>
+          Catch::toString(e3) == &quot;Unknown enum value 10&quot;
+        </Original>
+        <Expanded>
+          &quot;Unknown enum value 10&quot;
+==
+&quot;Unknown enum value 10&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Some simple comparisons between doubles">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d == Approx( 1.23 )
         </Original>
@@ -9,7 +95,7 @@
           1.23 == Approx( 1.23 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d != Approx( 1.22 )
         </Original>
@@ -17,7 +103,7 @@
           1.23 != Approx( 1.22 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d != Approx( 1.24 )
         </Original>
@@ -25,7 +111,7 @@
           1.23 != Approx( 1.24 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           Approx( d ) == 1.23
         </Original>
@@ -33,7 +119,7 @@
           Approx( 1.23 ) == 1.23
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           Approx( d ) != 1.22
         </Original>
@@ -41,7 +127,7 @@
           Approx( 1.23 ) != 1.22
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           Approx( d ) != 1.24
         </Original>
@@ -52,7 +138,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Approximate comparisons with different epsilons">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d != Approx( 1.231 )
         </Original>
@@ -60,7 +146,7 @@
           1.23 != Approx( 1.231 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d == Approx( 1.231 ).epsilon( 0.1 )
         </Original>
@@ -71,7 +157,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Approximate comparisons with floats">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           1.23f == Approx( 1.23f )
         </Original>
@@ -79,7 +165,7 @@
           1.23f == Approx( 1.2300000191 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           0.0f == Approx( 0.0f )
         </Original>
@@ -90,7 +176,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Approximate comparisons with ints">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           1 == Approx( 1 )
         </Original>
@@ -98,7 +184,7 @@
           1 == Approx( 1.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           0 == Approx( 0 )
         </Original>
@@ -109,7 +195,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Approximate comparisons with mixed numeric types">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           1.0f == Approx( 1 )
         </Original>
@@ -117,7 +203,7 @@
           1.0f == Approx( 1.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           0 == Approx( dZero)
         </Original>
@@ -125,7 +211,7 @@
           0 == Approx( 0.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           0 == Approx( dSmall ).epsilon( 0.001 )
         </Original>
@@ -133,7 +219,7 @@
           0 == Approx( 0.00001 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           1.234f == Approx( dMedium )
         </Original>
@@ -141,7 +227,7 @@
           1.234f == Approx( 1.234 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           dMedium == Approx( 1.234f )
         </Original>
@@ -152,7 +238,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Use a custom approx">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d == approx( 1.23 )
         </Original>
@@ -160,7 +246,7 @@
           1.23 == Approx( 1.23 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d == approx( 1.22 )
         </Original>
@@ -168,7 +254,7 @@
           1.23 == Approx( 1.22 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d == approx( 1.24 )
         </Original>
@@ -176,7 +262,7 @@
           1.23 == Approx( 1.24 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           d != approx( 1.25 )
         </Original>
@@ -184,7 +270,7 @@
           1.23 != Approx( 1.25 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           approx( d ) == 1.23
         </Original>
@@ -192,7 +278,7 @@
           Approx( 1.23 ) == 1.23
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           approx( d ) == 1.22
         </Original>
@@ -200,7 +286,7 @@
           Approx( 1.23 ) == 1.22
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           approx( d ) == 1.24
         </Original>
@@ -208,7 +294,7 @@
           Approx( 1.23 ) == 1.24
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           approx( d ) != 1.25
         </Original>
@@ -219,7 +305,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Approximate PI">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           divide( 22, 7 ) == Approx( 3.141 ).epsilon( 0.001 )
         </Original>
@@ -227,7 +313,7 @@
           3.1428571429 == Approx( 3.141 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ApproxTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ApproxTests.cpp" >
         <Original>
           divide( 22, 7 ) != Approx( 3.141 ).epsilon( 0.0001 )
         </Original>
@@ -238,7 +324,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="A METHOD_AS_TEST_CASE based test run that succeeds">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ClassTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
           s == &quot;hello&quot;
         </Original>
@@ -249,7 +335,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="A METHOD_AS_TEST_CASE based test run that fails">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ClassTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
           s == &quot;world&quot;
         </Original>
@@ -260,7 +346,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="A TEST_CASE_METHOD based test run that succeeds">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ClassTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
           m_a == 1
         </Original>
@@ -271,7 +357,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="A TEST_CASE_METHOD based test run that fails">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ClassTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ClassTests.cpp" >
         <Original>
           m_a == 2
         </Original>
@@ -282,7 +368,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Equality checks that should succeed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven == 7
         </Original>
@@ -290,7 +376,7 @@
           7 == 7
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one == Approx( 9.1f )
         </Original>
@@ -298,7 +384,7 @@
           9.1f == Approx( 9.1000003815 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.double_pi == Approx( 3.1415926535 )
         </Original>
@@ -306,7 +392,7 @@
           3.1415926535 == Approx( 3.1415926535 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello == &quot;hello&quot;
         </Original>
@@ -314,7 +400,7 @@
           &quot;hello&quot; == &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           &quot;hello&quot; == data.str_hello
         </Original>
@@ -322,7 +408,7 @@
           &quot;hello&quot; == &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello.size() == 5
         </Original>
@@ -330,7 +416,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           x == Approx( 1.3 )
         </Original>
@@ -341,7 +427,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Equality checks that should fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven == 6
         </Original>
@@ -349,7 +435,7 @@
           7 == 6
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven == 8
         </Original>
@@ -357,7 +443,7 @@
           7 == 8
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven == 0
         </Original>
@@ -365,7 +451,7 @@
           7 == 0
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one == Approx( 9.11f )
         </Original>
@@ -373,7 +459,7 @@
           9.1f == Approx( 9.1099996567 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one == Approx( 9.0f )
         </Original>
@@ -381,7 +467,7 @@
           9.1f == Approx( 9.0 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one == Approx( 1 )
         </Original>
@@ -389,7 +475,7 @@
           9.1f == Approx( 1.0 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one == Approx( 0 )
         </Original>
@@ -397,7 +483,7 @@
           9.1f == Approx( 0.0 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.double_pi == Approx( 3.1415 )
         </Original>
@@ -405,7 +491,7 @@
           3.1415926535 == Approx( 3.1415 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello == &quot;goodbye&quot;
         </Original>
@@ -413,7 +499,7 @@
           &quot;hello&quot; == &quot;goodbye&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello == &quot;hell&quot;
         </Original>
@@ -421,7 +507,7 @@
           &quot;hello&quot; == &quot;hell&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello == &quot;hello1&quot;
         </Original>
@@ -429,7 +515,7 @@
           &quot;hello&quot; == &quot;hello1&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello.size() == 6
         </Original>
@@ -437,7 +523,7 @@
           5 == 6
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           x == Approx( 1.301 )
         </Original>
@@ -445,10 +531,10 @@
           1.3 == Approx( 1.301 )
         </Expanded>
       </Expression>
-      <OverallResult success="false"/>
+      <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Inequality checks that should succeed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven != 6
         </Original>
@@ -456,7 +542,7 @@
           7 != 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven != 8
         </Original>
@@ -464,7 +550,7 @@
           7 != 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one != Approx( 9.11f )
         </Original>
@@ -472,7 +558,7 @@
           9.1f != Approx( 9.1099996567 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one != Approx( 9.0f )
         </Original>
@@ -480,7 +566,7 @@
           9.1f != Approx( 9.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one != Approx( 1 )
         </Original>
@@ -488,7 +574,7 @@
           9.1f != Approx( 1.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one != Approx( 0 )
         </Original>
@@ -496,7 +582,7 @@
           9.1f != Approx( 0.0 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.double_pi != Approx( 3.1415 )
         </Original>
@@ -504,7 +590,7 @@
           3.1415926535 != Approx( 3.1415 )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello != &quot;goodbye&quot;
         </Original>
@@ -512,7 +598,7 @@
           &quot;hello&quot; != &quot;goodbye&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello != &quot;hell&quot;
         </Original>
@@ -520,7 +606,7 @@
           &quot;hello&quot; != &quot;hell&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello != &quot;hello1&quot;
         </Original>
@@ -528,7 +614,7 @@
           &quot;hello&quot; != &quot;hello1&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello.size() != 6
         </Original>
@@ -539,7 +625,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Inequality checks that should fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven != 7
         </Original>
@@ -547,7 +633,7 @@
           7 != 7
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one != Approx( 9.1f )
         </Original>
@@ -555,7 +641,7 @@
           9.1f != Approx( 9.1000003815 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.double_pi != Approx( 3.1415926535 )
         </Original>
@@ -563,7 +649,7 @@
           3.1415926535 != Approx( 3.1415926535 )
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello != &quot;hello&quot;
         </Original>
@@ -571,7 +657,7 @@
           &quot;hello&quot; != &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello.size() != 5
         </Original>
@@ -582,7 +668,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Ordering comparison checks that should succeed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt; 8
         </Original>
@@ -590,7 +676,7 @@
           7 &lt; 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven > 6
         </Original>
@@ -598,7 +684,7 @@
           7 > 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven > 0
         </Original>
@@ -606,7 +692,7 @@
           7 > 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven > -1
         </Original>
@@ -614,7 +700,7 @@
           7 > -1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven >= 7
         </Original>
@@ -622,7 +708,7 @@
           7 >= 7
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven >= 6
         </Original>
@@ -630,7 +716,7 @@
           7 >= 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt;= 7
         </Original>
@@ -638,7 +724,7 @@
           7 &lt;= 7
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt;= 8
         </Original>
@@ -646,7 +732,7 @@
           7 &lt;= 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one > 9
         </Original>
@@ -654,7 +740,7 @@
           9.1f > 9
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one &lt; 10
         </Original>
@@ -662,7 +748,7 @@
           9.1f &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one &lt; 9.2
         </Original>
@@ -670,7 +756,7 @@
           9.1f &lt; 9.2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt;= &quot;hello&quot;
         </Original>
@@ -678,7 +764,7 @@
           &quot;hello&quot; &lt;= &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello >= &quot;hello&quot;
         </Original>
@@ -686,7 +772,7 @@
           &quot;hello&quot; >= &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt; &quot;hellp&quot;
         </Original>
@@ -694,7 +780,7 @@
           &quot;hello&quot; &lt; &quot;hellp&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt; &quot;zebra&quot;
         </Original>
@@ -702,7 +788,7 @@
           &quot;hello&quot; &lt; &quot;zebra&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello > &quot;hellm&quot;
         </Original>
@@ -710,7 +796,7 @@
           &quot;hello&quot; > &quot;hellm&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello > &quot;a&quot;
         </Original>
@@ -721,7 +807,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Ordering comparison checks that should fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven > 7
         </Original>
@@ -729,7 +815,7 @@
           7 > 7
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt; 7
         </Original>
@@ -737,7 +823,7 @@
           7 &lt; 7
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven > 8
         </Original>
@@ -745,7 +831,7 @@
           7 > 8
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt; 6
         </Original>
@@ -753,7 +839,7 @@
           7 &lt; 6
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt; 0
         </Original>
@@ -761,7 +847,7 @@
           7 &lt; 0
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt; -1
         </Original>
@@ -769,7 +855,7 @@
           7 &lt; -1
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven >= 8
         </Original>
@@ -777,7 +863,7 @@
           7 >= 8
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.int_seven &lt;= 6
         </Original>
@@ -785,7 +871,7 @@
           7 &lt;= 6
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one &lt; 9
         </Original>
@@ -793,7 +879,7 @@
           9.1f &lt; 9
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one > 10
         </Original>
@@ -801,7 +887,7 @@
           9.1f > 10
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.float_nine_point_one > 9.2
         </Original>
@@ -809,7 +895,7 @@
           9.1f > 9.2
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello > &quot;hello&quot;
         </Original>
@@ -817,7 +903,7 @@
           &quot;hello&quot; > &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt; &quot;hello&quot;
         </Original>
@@ -825,7 +911,7 @@
           &quot;hello&quot; &lt; &quot;hello&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello > &quot;hellp&quot;
         </Original>
@@ -833,7 +919,7 @@
           &quot;hello&quot; > &quot;hellp&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello > &quot;z&quot;
         </Original>
@@ -841,7 +927,7 @@
           &quot;hello&quot; > &quot;z&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt; &quot;hellm&quot;
         </Original>
@@ -849,7 +935,7 @@
           &quot;hello&quot; &lt; &quot;hellm&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt; &quot;a&quot;
         </Original>
@@ -857,7 +943,7 @@
           &quot;hello&quot; &lt; &quot;a&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello >= &quot;z&quot;
         </Original>
@@ -865,7 +951,7 @@
           &quot;hello&quot; >= &quot;z&quot;
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           data.str_hello &lt;= &quot;a&quot;
         </Original>
@@ -876,7 +962,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Comparisons with int literals don't warn when mixing signed/ unsigned">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           i == 1
         </Original>
@@ -884,7 +970,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           ui == 2
         </Original>
@@ -892,7 +978,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           l == 3
         </Original>
@@ -900,7 +986,7 @@
           3 == 3
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           ul == 4
         </Original>
@@ -908,7 +994,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           c == 5
         </Original>
@@ -916,7 +1002,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           uc == 6
         </Original>
@@ -924,7 +1010,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           1 == i
         </Original>
@@ -932,7 +1018,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           2 == ui
         </Original>
@@ -940,7 +1026,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           3 == l
         </Original>
@@ -948,7 +1034,7 @@
           3 == 3
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           4 == ul
         </Original>
@@ -956,7 +1042,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           5 == c
         </Original>
@@ -964,7 +1050,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           6 == uc
         </Original>
@@ -972,7 +1058,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           (std::numeric_limits&lt;unsigned long>::max)() > ul
         </Original>
@@ -983,7 +1069,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="comparisons between int variables">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           long_var == unsigned_char_var
         </Original>
@@ -991,7 +1077,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           long_var == unsigned_short_var
         </Original>
@@ -999,7 +1085,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           long_var == unsigned_int_var
         </Original>
@@ -1007,7 +1093,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           long_var == unsigned_long_var
         </Original>
@@ -1018,7 +1104,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="comparisons between const int variables">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           unsigned_char_var == 1
         </Original>
@@ -1026,7 +1112,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           unsigned_short_var == 1
         </Original>
@@ -1034,7 +1120,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           unsigned_int_var == 1
         </Original>
@@ -1042,7 +1128,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           unsigned_long_var == 1
         </Original>
@@ -1053,7 +1139,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Comparisons between unsigned ints and negative signed ints match c++ standard behaviour">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           ( -1 > 2u )
         </Original>
@@ -1061,7 +1147,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           -1 > 2u
         </Original>
@@ -1069,7 +1155,7 @@
           -1 > 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           ( 2u &lt; -1 )
         </Original>
@@ -1077,7 +1163,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           2u &lt; -1
         </Original>
@@ -1085,7 +1171,7 @@
           2 &lt; -1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           ( minInt > 2u )
         </Original>
@@ -1093,7 +1179,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           minInt > 2u
         </Original>
@@ -1104,7 +1190,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Comparisons between ints where one side is computed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           54 == 6*9
         </Original>
@@ -1115,7 +1201,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Pointers can be compared to null">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           p == __null
         </Original>
@@ -1123,7 +1209,7 @@
           __null == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           p == pNULL
         </Original>
@@ -1131,7 +1217,7 @@
           __null == __null
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           p != __null
         </Original>
@@ -1139,7 +1225,7 @@
           0x<hex digits> != 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           cp != __null
         </Original>
@@ -1147,7 +1233,7 @@
           0x<hex digits> != 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           cpc != __null
         </Original>
@@ -1155,7 +1241,7 @@
           0x<hex digits> != 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           returnsNull() == __null
         </Original>
@@ -1163,7 +1249,7 @@
           {null string} == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           returnsConstNull() == __null
         </Original>
@@ -1171,7 +1257,7 @@
           {null string} == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           __null != p
         </Original>
@@ -1182,7 +1268,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="'Not' checks that should succeed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           false == false
         </Original>
@@ -1190,7 +1276,7 @@
           false == false
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           true == true
         </Original>
@@ -1198,7 +1284,7 @@
           true == true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !false
         </Original>
@@ -1206,7 +1292,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !false
         </Original>
@@ -1214,7 +1300,7 @@
           !false
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !falseValue
         </Original>
@@ -1222,7 +1308,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !falseValue
         </Original>
@@ -1230,7 +1316,7 @@
           !false
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !(1 == 2)
         </Original>
@@ -1238,7 +1324,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !1 == 2
         </Original>
@@ -1249,7 +1335,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="'Not' checks that should fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           false != false
         </Original>
@@ -1257,7 +1343,7 @@
           false != false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           true != true
         </Original>
@@ -1265,7 +1351,7 @@
           true != true
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !true
         </Original>
@@ -1273,7 +1359,7 @@
           false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !true
         </Original>
@@ -1281,7 +1367,7 @@
           !true
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !trueValue
         </Original>
@@ -1289,7 +1375,7 @@
           false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !trueValue
         </Original>
@@ -1297,7 +1383,7 @@
           !true
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !(1 == 1)
         </Original>
@@ -1305,7 +1391,7 @@
           false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ConditionTests.cpp" >
+      <Expression success="false" type="CHECK_FALSE" filename="projects/SelfTest/ConditionTests.cpp" >
         <Original>
           !1 == 1
         </Original>
@@ -1316,7 +1402,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When checked exceptions are thrown they can be expected or unexpected">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="true" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows()
         </Original>
@@ -1324,7 +1410,7 @@
           thisThrows()
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="true" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisDoesntThrow()
         </Original>
@@ -1332,7 +1418,7 @@
           thisDoesntThrow()
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows()
         </Original>
@@ -1343,18 +1429,18 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Expected exceptions that don't throw or unexpected exceptions fail the test">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows()
         </Original>
         <Expanded>
           thisThrows()
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           expected exception
         </Exception>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisDoesntThrow()
         </Original>
@@ -1362,27 +1448,27 @@
           thisDoesntThrow()
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows()
         </Original>
         <Expanded>
           thisThrows()
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           expected exception
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown directly they are always failures">
-      <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
         unexpected exception
       </Exception>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="An unchecked exception reports the line of the last assertion">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           1 == 1
         </Original>
@@ -1390,14 +1476,14 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           {Unknown expression after the reported line}
         </Original>
         <Expanded>
           {Unknown expression after the reported line}
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           unexpected exception
         </Exception>
       </Expression>
@@ -1405,7 +1491,7 @@
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown from sections they are always failures">
       <Section name="section name">
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           unexpected exception
         </Exception>
         <OverallResults successes="0" failures="1" expectedFailures="0"/>
@@ -1413,92 +1499,92 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown from functions they are always failures">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows() == 0
         </Original>
         <Expanded>
           thisThrows() == 0
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           expected exception
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown during a REQUIRE the test should abort fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows() == 0
         </Original>
         <Expanded>
           thisThrows() == 0
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           expected exception
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown during a CHECK the test should abort and fail">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisThrows() == 0
         </Original>
         <Expanded>
           thisThrows() == 0
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           expected exception
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="When unchecked exceptions are thrown, but caught, they do not affect the test">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Unexpected custom exceptions can be translated">
-      <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
         custom exception
       </Exception>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Custom exceptions can be translated when testing for nothrow">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="REQUIRE_NOTHROW" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           throwCustom()
         </Original>
         <Expanded>
           throwCustom()
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           custom exception - not std
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Custom exceptions can be translated when testing for throwing as something else">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="false" type="REQUIRE_THROWS_AS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           throwCustom()
         </Original>
         <Expanded>
           throwCustom()
         </Expanded>
-        <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+        <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
           custom exception - not std
         </Exception>
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Unexpected exceptions can be translated">
-      <Exception filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Exception filename="projects/SelfTest/ExceptionTests.cpp" >
         3.14
       </Exception>
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="NotImplemented exception">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/ExceptionTests.cpp" >
+      <Expression success="true" type="REQUIRE_THROWS" filename="projects/SelfTest/ExceptionTests.cpp" >
         <Original>
           thisFunctionNotImplemented( 7 )
         </Original>
@@ -1509,7 +1595,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Generators over two ranges">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1517,7 +1603,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1525,7 +1611,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1533,7 +1619,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1541,7 +1627,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1549,7 +1635,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1557,7 +1643,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1565,7 +1651,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1573,7 +1659,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1581,7 +1667,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1589,7 +1675,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1597,7 +1683,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1605,7 +1691,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1613,7 +1699,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1621,7 +1707,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1629,7 +1715,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1637,7 +1723,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1645,7 +1731,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1653,7 +1739,7 @@
           200 == 200
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1661,7 +1747,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1669,7 +1755,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1677,7 +1763,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1685,7 +1771,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1693,7 +1779,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1701,7 +1787,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1709,7 +1795,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1717,7 +1803,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1725,7 +1811,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1733,7 +1819,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1741,7 +1827,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1749,7 +1835,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1757,7 +1843,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1765,7 +1851,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1773,7 +1859,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1781,7 +1867,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1789,7 +1875,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1797,7 +1883,7 @@
           202 == 202
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1805,7 +1891,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1813,7 +1899,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1821,7 +1907,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1829,7 +1915,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1837,7 +1923,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1845,7 +1931,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1853,7 +1939,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1861,7 +1947,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1869,7 +1955,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1877,7 +1963,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1885,7 +1971,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1893,7 +1979,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1901,7 +1987,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1909,7 +1995,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1917,7 +2003,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1925,7 +2011,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1933,7 +2019,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1941,7 +2027,7 @@
           204 == 204
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1949,7 +2035,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1957,7 +2043,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1965,7 +2051,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1973,7 +2059,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1981,7 +2067,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -1989,7 +2075,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -1997,7 +2083,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2005,7 +2091,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2013,7 +2099,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2021,7 +2107,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2029,7 +2115,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2037,7 +2123,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2045,7 +2131,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2053,7 +2139,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2061,7 +2147,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2069,7 +2155,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2077,7 +2163,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2085,7 +2171,7 @@
           206 == 206
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2093,7 +2179,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2101,7 +2187,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2109,7 +2195,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2117,7 +2203,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2125,7 +2211,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2133,7 +2219,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2141,7 +2227,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2149,7 +2235,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2157,7 +2243,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2165,7 +2251,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2173,7 +2259,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2181,7 +2267,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2189,7 +2275,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2197,7 +2283,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2205,7 +2291,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2213,7 +2299,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2221,7 +2307,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2229,7 +2315,7 @@
           208 == 208
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2237,7 +2323,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2245,7 +2331,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2253,7 +2339,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2261,7 +2347,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2269,7 +2355,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2277,7 +2363,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2285,7 +2371,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2293,7 +2379,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2301,7 +2387,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2309,7 +2395,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2317,7 +2403,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2325,7 +2411,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2333,7 +2419,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2341,7 +2427,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2349,7 +2435,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2357,7 +2443,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2365,7 +2451,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2373,7 +2459,7 @@
           210 == 210
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2381,7 +2467,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2389,7 +2475,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2397,7 +2483,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2405,7 +2491,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2413,7 +2499,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2421,7 +2507,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2429,7 +2515,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2437,7 +2523,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2445,7 +2531,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2453,7 +2539,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2461,7 +2547,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2469,7 +2555,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2477,7 +2563,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2485,7 +2571,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2493,7 +2579,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2501,7 +2587,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2509,7 +2595,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2517,7 +2603,7 @@
           212 == 212
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2525,7 +2611,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2533,7 +2619,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2541,7 +2627,7 @@
           4 == 4
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2549,7 +2635,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2557,7 +2643,7 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2565,7 +2651,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2573,7 +2659,7 @@
           8 == 8
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2581,7 +2667,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2589,7 +2675,7 @@
           10 == 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2597,7 +2683,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2605,7 +2691,7 @@
           30 == 30
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2613,7 +2699,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2621,7 +2707,7 @@
           40 == 40
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2629,7 +2715,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2637,7 +2723,7 @@
           42 == 42
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2645,7 +2731,7 @@
           214 == 214
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( i, 2 ) == i*2
         </Original>
@@ -2653,7 +2739,7 @@
           72 == 72
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           multiply( j, 2 ) == j*2
         </Original>
@@ -2664,7 +2750,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Generator over a range of pairs">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           i->first == i->second-1
         </Original>
@@ -2672,7 +2758,7 @@
           0 == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/GeneratorTests.cpp" >
+      <Expression success="true" type="CATCH_REQUIRE" filename="projects/SelfTest/GeneratorTests.cpp" >
         <Original>
           i->first == i->second-1
         </Original>
@@ -2689,7 +2775,7 @@
       <Warning>
         this is a warning
       </Warning>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="SUCCEED counts as a test pass">
       <OverallResult success="true"/>
@@ -2701,7 +2787,7 @@
       <Info>
         so should this
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           a == 1
         </Original>
@@ -2712,7 +2798,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="INFO gets logged on failure, even if captured before successful assertions">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           a == 2
         </Original>
@@ -2723,7 +2809,7 @@
       <Info>
         this message should be logged
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           a == 1
         </Original>
@@ -2734,7 +2820,7 @@
       <Info>
         and this, but later
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           a == 0
         </Original>
@@ -2742,7 +2828,7 @@
           2 == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           a == 2
         </Original>
@@ -2787,10 +2873,10 @@
       <Section name="two">
         <OverallResults successes="0" failures="1" expectedFailures="0"/>
       </Section>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="SCOPED_INFO is reset for each loop">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2798,7 +2884,7 @@
           0 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2806,7 +2892,7 @@
           1 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2814,7 +2900,7 @@
           2 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2822,7 +2908,7 @@
           3 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2830,7 +2916,7 @@
           4 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2838,7 +2924,7 @@
           5 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2846,7 +2932,7 @@
           6 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2854,7 +2940,7 @@
           7 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2862,7 +2948,7 @@
           8 &lt; 10
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2876,7 +2962,7 @@
       <Info>
         i := 10
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           i &lt; 10
         </Original>
@@ -2887,7 +2973,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="The NO_FAIL macro reports a failure but does not fail the test">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="CHECK_NOFAIL" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           1 == 2
         </Original>
@@ -2898,7 +2984,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="just info">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="just failure">
       <Failure>
@@ -2913,7 +2999,7 @@
       <Info>
         i := 7
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MessageTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MessageTests.cpp" >
         <Original>
           false
         </Original>
@@ -2930,11 +3016,11 @@
       <Warning>
         toString(p): 0x<hex digits>
       </Warning>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="random SECTION tests">
       <Section name="s1" description="doesn't equal">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             a != b
           </Original>
@@ -2942,7 +3028,7 @@
             1 != 2
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             b != a
           </Original>
@@ -2953,7 +3039,7 @@
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="s2" description="not equal">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             a != b
           </Original>
@@ -2967,7 +3053,7 @@
     </TestCase>
     <TestCase name="nested SECTION tests">
       <Section name="s1" description="doesn't equal">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             a != b
           </Original>
@@ -2975,7 +3061,7 @@
             1 != 2
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             b != a
           </Original>
@@ -2984,7 +3070,7 @@
           </Expanded>
         </Expression>
         <Section name="s2" description="not equal">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
             <Original>
               a != b
             </Original>
@@ -3001,7 +3087,7 @@
     <TestCase name="more nested SECTION tests">
       <Section name="s1" description="doesn't equal">
         <Section name="s2" description="equal">
-          <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+          <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
             <Original>
               a == b
             </Original>
@@ -3031,11 +3117,11 @@
       <Section name="f (leaf)">
         <OverallResults successes="0" failures="1" expectedFailures="0"/>
       </Section>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="looped SECTION tests">
       <Section name="s1" description="b is currently: 0">
-        <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             b > a
           </Original>
@@ -3051,7 +3137,7 @@
       <Info>
         Testing if fib[0] (1) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3062,7 +3148,7 @@
       <Info>
         Testing if fib[1] (1) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3070,7 +3156,7 @@
           1 == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3081,7 +3167,7 @@
       <Info>
         Testing if fib[3] (3) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3092,7 +3178,7 @@
       <Info>
         Testing if fib[4] (5) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3100,7 +3186,7 @@
           1 == 0
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3111,7 +3197,7 @@
       <Info>
         Testing if fib[6] (13) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3122,7 +3208,7 @@
       <Info>
         Testing if fib[7] (21) is even
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           ( fib[i] % 2 ) == 0
         </Original>
@@ -3133,10 +3219,10 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Sends stuff to stdout and stderr">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="null strings">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           makeString( false ) != static_cast&lt;char*>(__null)
         </Original>
@@ -3144,7 +3230,7 @@
           &quot;valid string&quot; != {null string}
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           makeString( true ) == static_cast&lt;char*>(__null)
         </Original>
@@ -3155,7 +3241,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="checkedIf">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           flag
         </Original>
@@ -3163,7 +3249,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testCheckedIf( true )
         </Original>
@@ -3174,7 +3260,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="checkedIf, failing">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECKED_IF" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           flag
         </Original>
@@ -3182,7 +3268,7 @@
           false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testCheckedIf( false )
         </Original>
@@ -3193,7 +3279,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="checkedElse">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           flag
         </Original>
@@ -3201,7 +3287,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testCheckedElse( true )
         </Original>
@@ -3212,7 +3298,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="checkedElse, failing">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECKED_ELSE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           flag
         </Original>
@@ -3220,7 +3306,7 @@
           false
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testCheckedElse( false )
         </Original>
@@ -3237,13 +3323,13 @@
       <Section name="encoded chars" description="these should all be encoded: &amp;&amp;&amp;&quot;&quot;&quot;&lt;&lt;&lt;&amp;&quot;&lt;&lt;&amp;&quot;">
         <OverallResults successes="0" failures="1" expectedFailures="0"/>
       </Section>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="send a single char to INFO">
       <Info>
         3
       </Info>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           false
         </Original>
@@ -3254,7 +3340,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="atomic if">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           x == 0
         </Original>
@@ -3265,7 +3351,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="String matchers">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() Contains( &quot;string&quot; )
         </Original>
@@ -3273,7 +3359,7 @@
           &quot;this string contains 'abc' as a substring&quot; contains: &quot;string&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() Contains( &quot;abc&quot; )
         </Original>
@@ -3281,7 +3367,7 @@
           &quot;this string contains 'abc' as a substring&quot; contains: &quot;abc&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() StartsWith( &quot;this&quot; )
         </Original>
@@ -3289,7 +3375,7 @@
           &quot;this string contains 'abc' as a substring&quot; starts with: &quot;this&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() EndsWith( &quot;substring&quot; )
         </Original>
@@ -3300,7 +3386,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Contains string matcher">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() Contains( &quot;not there&quot; )
         </Original>
@@ -3311,7 +3397,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="StartsWith string matcher">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() StartsWith( &quot;string&quot; )
         </Original>
@@ -3322,7 +3408,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="EndsWith string matcher">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() EndsWith( &quot;this&quot; )
         </Original>
@@ -3333,7 +3419,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Equals string matcher">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() Equals( &quot;something else&quot; )
         </Original>
@@ -3344,7 +3430,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Equals string matcher, with NULL">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           &quot;&quot; Equals(__null)
         </Original>
@@ -3355,7 +3441,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="AllOf matcher">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() AllOf( Catch::Contains( &quot;string&quot; ), Catch::Contains( &quot;abc&quot; ) )
         </Original>
@@ -3366,7 +3452,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="AnyOf matcher">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() AnyOf( Catch::Contains( &quot;string&quot; ), Catch::Contains( &quot;not there&quot; ) )
         </Original>
@@ -3374,7 +3460,7 @@
           &quot;this string contains 'abc' as a substring&quot; ( contains: &quot;string&quot; or contains: &quot;not there&quot; )
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() AnyOf( Catch::Contains( &quot;not there&quot; ), Catch::Contains( &quot;string&quot; ) )
         </Original>
@@ -3385,7 +3471,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Equals">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           testStringForMatching() Equals( &quot;this string contains 'abc' as a substring&quot; )
         </Original>
@@ -3396,7 +3482,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Factorials are computed">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           Factorial(0) == 1
         </Original>
@@ -3404,7 +3490,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           Factorial(1) == 1
         </Original>
@@ -3412,7 +3498,7 @@
           1 == 1
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           Factorial(2) == 2
         </Original>
@@ -3420,7 +3506,7 @@
           2 == 2
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           Factorial(3) == 6
         </Original>
@@ -3428,33 +3514,33 @@
           6 == 6
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           Factorial(10) == 3628800
         </Original>
         <Expanded>
-          0x<hex digits> == 3628800
+          0x<hex digits> == 0x<hex digits>
         </Expanded>
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="An empty test with no assertions">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="Nice descriptive name">
       <Warning>
         This one ran
       </Warning>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="first tag">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="second tag">
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
     <TestCase name="vectors can be sized and resized">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.size() == 5
         </Original>
@@ -3462,7 +3548,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.capacity() >= 5
         </Original>
@@ -3471,7 +3557,7 @@
         </Expanded>
       </Expression>
       <Section name="resizing bigger changes size and capacity">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.size() == 10
           </Original>
@@ -3479,7 +3565,7 @@
             10 == 10
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.capacity() >= 10
           </Original>
@@ -3489,7 +3575,7 @@
         </Expression>
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.size() == 5
         </Original>
@@ -3497,7 +3583,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.capacity() >= 5
         </Original>
@@ -3506,7 +3592,7 @@
         </Expanded>
       </Expression>
       <Section name="resizing smaller changes size but not capacity">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.size() == 0
           </Original>
@@ -3514,7 +3600,7 @@
             0 == 0
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.capacity() >= 5
           </Original>
@@ -3523,7 +3609,7 @@
           </Expanded>
         </Expression>
         <Section name="We can use the 'swap trick' to reset the capacity">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
             <Original>
               v.capacity() == 0
             </Original>
@@ -3535,7 +3621,7 @@
         </Section>
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.size() == 5
         </Original>
@@ -3543,7 +3629,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.capacity() >= 5
         </Original>
@@ -3552,7 +3638,7 @@
         </Expanded>
       </Expression>
       <Section name="reserving bigger changes capacity but not size">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.size() == 5
           </Original>
@@ -3560,7 +3646,7 @@
             5 == 5
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.capacity() >= 10
           </Original>
@@ -3570,7 +3656,7 @@
         </Expression>
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.size() == 5
         </Original>
@@ -3578,7 +3664,7 @@
           5 == 5
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           v.capacity() >= 5
         </Original>
@@ -3587,7 +3673,7 @@
         </Expanded>
       </Expression>
       <Section name="reserving smaller does not change size or capacity">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.size() == 5
           </Original>
@@ -3595,7 +3681,7 @@
             5 == 5
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/MiscTests.cpp" >
           <Original>
             v.capacity() >= 5
           </Original>
@@ -3623,7 +3709,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Tabs and newlines show in output">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           s1 == s2
         </Original>
@@ -3641,7 +3727,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="toString on const wchar_t const pointer returns the string contents">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           result == &quot;\&quot;wide load\&quot;&quot;
         </Original>
@@ -3652,7 +3738,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="toString on const wchar_t pointer returns the string contents">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           result == &quot;\&quot;wide load\&quot;&quot;
         </Original>
@@ -3663,7 +3749,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="toString on wchar_t const pointer returns the string contents">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           result == &quot;\&quot;wide load\&quot;&quot;
         </Original>
@@ -3674,7 +3760,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="toString on wchar_t returns the string contents">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/MiscTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/MiscTests.cpp" >
         <Original>
           result == &quot;\&quot;wide load\&quot;&quot;
         </Original>
@@ -3686,7 +3772,7 @@
     </TestCase>
     <TestCase name="Process can be configured on command line">
       <Section name="default - no arguments">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             parseIntoConfig( argv, config )
           </Original>
@@ -3694,7 +3780,7 @@
             parseIntoConfig( argv, config )
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             config.shouldDebugBreak == false
           </Original>
@@ -3702,7 +3788,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             config.abortAfter == -1
           </Original>
@@ -3710,7 +3796,7 @@
             -1 == -1
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             config.noThrow == false
           </Original>
@@ -3718,7 +3804,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             config.reporterName.empty()
           </Original>
@@ -3730,7 +3816,7 @@
       </Section>
       <Section name="test lists">
         <Section name="1 test" description="Specify one test case using">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3738,7 +3824,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;notIncluded&quot; ) ) == false
             </Original>
@@ -3746,7 +3832,7 @@
               false == false
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;test1&quot; ) )
             </Original>
@@ -3760,7 +3846,7 @@
       </Section>
       <Section name="test lists">
         <Section name="Specify one test case exclusion using exclude:">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3768,7 +3854,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;test1&quot; ) ) == false
             </Original>
@@ -3776,7 +3862,7 @@
               false == false
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;alwaysIncluded&quot; ) )
             </Original>
@@ -3790,7 +3876,7 @@
       </Section>
       <Section name="test lists">
         <Section name="Specify one test case exclusion using ~">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3798,7 +3884,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;test1&quot; ) ) == false
             </Original>
@@ -3806,7 +3892,7 @@
               false == false
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               cfg.testSpec().matches( fakeTestCase( &quot;alwaysIncluded&quot; ) )
             </Original>
@@ -3820,7 +3906,7 @@
       </Section>
       <Section name="reporter">
         <Section name="-r/console">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3828,7 +3914,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.reporterName == &quot;console&quot;
             </Original>
@@ -3842,7 +3928,7 @@
       </Section>
       <Section name="reporter">
         <Section name="-r/xml">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3850,7 +3936,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.reporterName == &quot;xml&quot;
             </Original>
@@ -3864,7 +3950,7 @@
       </Section>
       <Section name="reporter">
         <Section name="--reporter/junit">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3872,7 +3958,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.reporterName == &quot;junit&quot;
             </Original>
@@ -3886,7 +3972,7 @@
       </Section>
       <Section name="debugger">
         <Section name="-b">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3894,7 +3980,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.shouldDebugBreak == true
             </Original>
@@ -3908,7 +3994,7 @@
       </Section>
       <Section name="debugger">
         <Section name="--break">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3916,7 +4002,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.shouldDebugBreak
             </Original>
@@ -3930,7 +4016,7 @@
       </Section>
       <Section name="abort">
         <Section name="-a aborts after first failure">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3938,7 +4024,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.abortAfter == 1
             </Original>
@@ -3952,7 +4038,7 @@
       </Section>
       <Section name="abort">
         <Section name="-x 2 aborts after two failures">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -3960,7 +4046,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.abortAfter == 2
             </Original>
@@ -3974,7 +4060,7 @@
       </Section>
       <Section name="abort">
         <Section name="-x must be greater than zero">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfigAndReturnError( argv, config ) Contains( &quot;greater than zero&quot; )
             </Original>
@@ -3989,7 +4075,7 @@
       </Section>
       <Section name="abort">
         <Section name="-x must be numeric">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE_THAT" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfigAndReturnError( argv, config ) Contains( &quot;-x&quot; )
             </Original>
@@ -4004,7 +4090,7 @@
       </Section>
       <Section name="nothrow">
         <Section name="-e">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -4012,7 +4098,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.noThrow == true
             </Original>
@@ -4026,7 +4112,7 @@
       </Section>
       <Section name="nothrow">
         <Section name="--nothrow">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -4034,7 +4120,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.noThrow == true
             </Original>
@@ -4048,7 +4134,7 @@
       </Section>
       <Section name="output filename">
         <Section name="-o filename">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -4056,7 +4142,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.outputFilename == &quot;filename.ext&quot;
             </Original>
@@ -4070,7 +4156,7 @@
       </Section>
       <Section name="output filename">
         <Section name="--out">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -4078,7 +4164,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.outputFilename == &quot;filename.ext&quot;
             </Original>
@@ -4092,7 +4178,7 @@
       </Section>
       <Section name="combinations">
         <Section name="Single character flags can be combined">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               parseIntoConfig( argv, config )
             </Original>
@@ -4100,7 +4186,7 @@
               parseIntoConfig( argv, config )
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.abortAfter == 1
             </Original>
@@ -4108,7 +4194,7 @@
               1 == 1
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.shouldDebugBreak
             </Original>
@@ -4116,7 +4202,7 @@
               true
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               config.noThrow == true
             </Original>
@@ -4128,12 +4214,56 @@
         </Section>
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
+      <Section name="force-colour">
+        <Section name="--force-colour">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              config.forceColour
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="force-colour">
+        <Section name="without --force-colour">
+          <Expression success="true" type="CHECK_NOTHROW" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              parseIntoConfig( argv, config )
+            </Original>
+            <Expanded>
+              parseIntoConfig( argv, config )
+            </Expanded>
+          </Expression>
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
+            <Original>
+              !config.forceColour
+            </Original>
+            <Expanded>
+              true
+            </Expanded>
+          </Expression>
+          <OverallResults successes="2" failures="0" expectedFailures="0"/>
+        </Section>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Long strings can be wrapped">
       <Section name="plain string">
         <Section name="No wrapping">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString
             </Original>
@@ -4143,7 +4273,7 @@
 &quot;one two three four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString
             </Original>
@@ -4159,7 +4289,7 @@
       </Section>
       <Section name="plain string">
         <Section name="Wrapped once">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 17 ) ).toString() == &quot;one two three\nfour&quot;
             </Original>
@@ -4171,7 +4301,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 16 ) ).toString() == &quot;one two three\nfour&quot;
             </Original>
@@ -4183,7 +4313,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 14 ) ).toString() == &quot;one two three\nfour&quot;
             </Original>
@@ -4195,7 +4325,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 13 ) ).toString() == &quot;one two three\nfour&quot;
             </Original>
@@ -4207,7 +4337,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 12 ) ).toString() == &quot;one two\nthree four&quot;
             </Original>
@@ -4225,7 +4355,7 @@
       </Section>
       <Section name="plain string">
         <Section name="Wrapped twice">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 9 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4239,7 +4369,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 8 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4253,7 +4383,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 7 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4273,7 +4403,7 @@
       </Section>
       <Section name="plain string">
         <Section name="Wrapped three times">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 6 ) ).toString() == &quot;one\ntwo\nthree\nfour&quot;
             </Original>
@@ -4289,7 +4419,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 5 ) ).toString() == &quot;one\ntwo\nthree\nfour&quot;
             </Original>
@@ -4311,7 +4441,7 @@
       </Section>
       <Section name="plain string">
         <Section name="Short wrap">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdef&quot;, TextAttributes().setWidth( 4 ) ).toString() == &quot;abc-\ndef&quot;
             </Original>
@@ -4323,7 +4453,7 @@
 def&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdefg&quot;, TextAttributes().setWidth( 4 ) ).toString() == &quot;abc-\ndefg&quot;
             </Original>
@@ -4335,7 +4465,7 @@
 defg&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdefgh&quot;, TextAttributes().setWidth( 4 ) ).toString() == &quot;abc-\ndef-\ngh&quot;
             </Original>
@@ -4349,7 +4479,7 @@
 gh&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 4 ) ).toString() == &quot;one\ntwo\nthr-\nee\nfour&quot;
             </Original>
@@ -4367,7 +4497,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 3 ) ).toString() == &quot;one\ntwo\nth-\nree\nfo-\nur&quot;
             </Original>
@@ -4393,7 +4523,7 @@
       </Section>
       <Section name="plain string">
         <Section name="As container">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text.size() == 4
             </Original>
@@ -4401,7 +4531,7 @@
               4 == 4
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text[0] == &quot;one&quot;
             </Original>
@@ -4409,7 +4539,7 @@
               &quot;one&quot; == &quot;one&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text[1] == &quot;two&quot;
             </Original>
@@ -4417,7 +4547,7 @@
               &quot;two&quot; == &quot;two&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text[2] == &quot;three&quot;
             </Original>
@@ -4425,7 +4555,7 @@
               &quot;three&quot; == &quot;three&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text[3] == &quot;four&quot;
             </Original>
@@ -4439,7 +4569,7 @@
       </Section>
       <Section name="plain string">
         <Section name="Indent first line differently">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               text.toString() == &quot; one two\n    three\n    four&quot;
             </Original>
@@ -4459,7 +4589,7 @@
       </Section>
       <Section name="With newlines">
         <Section name="No wrapping">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString
             </Original>
@@ -4471,7 +4601,7 @@
 three four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString
             </Original>
@@ -4483,7 +4613,7 @@
 three four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString
             </Original>
@@ -4501,7 +4631,7 @@
       </Section>
       <Section name="With newlines">
         <Section name="Trailing newline">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdef\n&quot;, TextAttributes().setWidth( 10 ) ).toString() == &quot;abcdef\n&quot;
             </Original>
@@ -4513,7 +4643,7 @@
 &quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdef&quot;, TextAttributes().setWidth( 6 ) ).toString() == &quot;abcdef&quot;
             </Original>
@@ -4521,7 +4651,7 @@
               &quot;abcdef&quot; == &quot;abcdef&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( &quot;abcdef\n&quot;, TextAttributes().setWidth( 6 ) ).toString() == &quot;abcdef\n&quot;
             </Original>
@@ -4539,7 +4669,7 @@
       </Section>
       <Section name="With newlines">
         <Section name="Wrapped once">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 9 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4553,7 +4683,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 8 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4567,7 +4697,7 @@
 four&quot;
             </Expanded>
           </Expression>
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 7 ) ).toString() == &quot;one two\nthree\nfour&quot;
             </Original>
@@ -4587,7 +4717,7 @@
       </Section>
       <Section name="With newlines">
         <Section name="Wrapped twice">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+          <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
             <Original>
               Text( testString, TextAttributes().setWidth( 6 ) ).toString() == &quot;one\ntwo\nthree\nfour&quot;
             </Original>
@@ -4608,7 +4738,7 @@
         <OverallResults successes="1" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="With tabs">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
           <Original>
             Text( testString, TextAttributes().setWidth( 15 ) ).toString() == &quot;one two three\n        four\n        five\n        six&quot;
           </Original>
@@ -4628,11 +4758,147 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Strings can be rendered with colour">
+    <TestCase name="replaceInPlace">
+      <Section name="replace single char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, &quot;b&quot;, &quot;z&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == &quot;azcdefcg&quot;
+          </Original>
+          <Expanded>
+            &quot;azcdefcg&quot; == &quot;azcdefcg&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace two chars">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, &quot;c&quot;, &quot;z&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == &quot;abzdefzg&quot;
+          </Original>
+          <Expanded>
+            &quot;abzdefzg&quot; == &quot;abzdefzg&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace first char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, &quot;a&quot;, &quot;z&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == &quot;zbcdefcg&quot;
+          </Original>
+          <Expanded>
+            &quot;zbcdefcg&quot; == &quot;zbcdefcg&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace last char">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, &quot;g&quot;, &quot;z&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == &quot;abcdefcz&quot;
+          </Original>
+          <Expanded>
+            &quot;abcdefcz&quot; == &quot;abcdefcz&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace all chars">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( letters, letters, &quot;replaced&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == &quot;replaced&quot;
+          </Original>
+          <Expanded>
+            &quot;replaced&quot; == &quot;replaced&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="replace no chars">
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            !replaceInPlace( letters, &quot;x&quot;, &quot;z&quot; )
+          </Original>
+          <Expanded>
+            !false
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            letters == letters
+          </Original>
+          <Expanded>
+            &quot;abcdefcg&quot; == &quot;abcdefcg&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
+      <Section name="escape '">
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            replaceInPlace( s, &quot;'&quot;, &quot;|'&quot; )
+          </Original>
+          <Expanded>
+            true
+          </Expanded>
+        </Expression>
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
+          <Original>
+            s == &quot;didn|'t&quot;
+          </Original>
+          <Expanded>
+            &quot;didn|'t&quot; == &quot;didn|'t&quot;
+          </Expanded>
+        </Expression>
+        <OverallResults successes="2" failures="0" expectedFailures="0"/>
+      </Section>
       <OverallResult success="true"/>
     </TestCase>
+    <TestCase name="Strings can be rendered with colour">
+      <OverallResult success="false"/>
+    </TestCase>
     <TestCase name="Text can be formatted using the Text class">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
         <Original>
           Text( &quot;hi there&quot; ).toString() == &quot;hi there&quot;
         </Original>
@@ -4640,7 +4906,7 @@
           &quot;hi there&quot; == &quot;hi there&quot;
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TestMain.cpp" >
         <Original>
           Text( &quot;hi there&quot;, narrow ).toString() == &quot;hi\nthere&quot;
         </Original>
@@ -4655,7 +4921,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Long text is truncted">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TestMain.cpp" >
+      <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TestMain.cpp" >
         <Original>
           t.toString() EndsWith( &quot;... message truncated due to excessive size&quot; )
         </Original>
@@ -5666,7 +5932,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Parsing a std::pair">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           (std::pair&lt;int, int>( 1, 2 )) == aNicePair
         </Original>
@@ -5676,20 +5942,20 @@
       </Expression>
       <OverallResult success="true"/>
     </TestCase>
-    <TestCase name="Where the is more to the expression after the RHS[failing]">
+    <TestCase name="Where there is more to the expression after the RHS">
       <Warning>
         Uncomment the code in this test to check that it gives a sensible compiler error
       </Warning>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="Where the LHS is not a simple value[failing]">
+    <TestCase name="Where the LHS is not a simple value">
       <Warning>
         Uncomment the code in this test to check that it gives a sensible compiler error
       </Warning>
-      <OverallResult success="true"/>
+      <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="A failing expression with a non streamable type is still captured[failing]">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="A failing expression with a non streamable type is still captured">
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           &amp;o1 == &amp;o2
         </Original>
@@ -5697,7 +5963,7 @@
           0x<hex digits> == 0x<hex digits>
         </Expanded>
       </Expression>
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="false" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           o1 == o2
         </Original>
@@ -5707,8 +5973,8 @@
       </Expression>
       <OverallResult success="false"/>
     </TestCase>
-    <TestCase name="string literals of different sizes can be compared[failing]">
-      <Expression success="false" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+    <TestCase name="string literals of different sizes can be compared">
+      <Expression success="false" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           std::string( &quot;first&quot; ) == &quot;second&quot;
         </Original>
@@ -5719,7 +5985,7 @@
       <OverallResult success="false"/>
     </TestCase>
     <TestCase name="An expression with side-effects should only be evaluated once">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           i++ == 7
         </Original>
@@ -5727,7 +5993,7 @@
           7 == 7
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           i++ == 8
         </Original>
@@ -5738,7 +6004,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Operators at different namespace levels not hijacked by Koenig lookup">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           0x<hex digits> == o
         </Original>
@@ -5749,7 +6015,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Demonstrate that a non-const == is not used">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           t == 1u
         </Original>
@@ -5760,7 +6026,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Test enum bit values">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           0x<hex digits> == bit30and31
         </Original>
@@ -5771,7 +6037,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="boolean member">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           obj.prop != __null
         </Original>
@@ -5783,7 +6049,7 @@
     </TestCase>
     <TestCase name="(unimplemented) static bools can be evaluated">
       <Section name="compare to true">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             is_true&lt;true>::value == true
           </Original>
@@ -5791,7 +6057,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             true == is_true&lt;true>::value
           </Original>
@@ -5802,7 +6068,7 @@
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="compare to false">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             is_true&lt;false>::value == false
           </Original>
@@ -5810,7 +6076,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             false == is_true&lt;false>::value
           </Original>
@@ -5821,7 +6087,7 @@
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="negation">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             !is_true&lt;false>::value
           </Original>
@@ -5832,7 +6098,7 @@
         <OverallResults successes="1" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="double negation">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             !!is_true&lt;true>::value
           </Original>
@@ -5843,7 +6109,7 @@
         <OverallResults successes="1" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="direct">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             is_true&lt;true>::value
           </Original>
@@ -5851,7 +6117,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             !is_true&lt;false>::value
           </Original>
@@ -5864,7 +6130,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Objects that evaluated in boolean contexts can be checked">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           True
         </Original>
@@ -5872,7 +6138,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           !False
         </Original>
@@ -5880,7 +6146,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           !False
         </Original>
@@ -5891,7 +6157,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Assertions then sections">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           Catch::alwaysTrue()
         </Original>
@@ -5900,7 +6166,7 @@
         </Expanded>
       </Expression>
       <Section name="A section">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             Catch::alwaysTrue()
           </Original>
@@ -5909,7 +6175,7 @@
           </Expanded>
         </Expression>
         <Section name="Another section">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
             <Original>
               Catch::alwaysTrue()
             </Original>
@@ -5921,7 +6187,7 @@
         </Section>
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           Catch::alwaysTrue()
         </Original>
@@ -5930,7 +6196,7 @@
         </Expanded>
       </Expression>
       <Section name="A section">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
           <Original>
             Catch::alwaysTrue()
           </Original>
@@ -5939,7 +6205,7 @@
           </Expanded>
         </Expression>
         <Section name="Another other section">
-          <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+          <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
             <Original>
               Catch::alwaysTrue()
             </Original>
@@ -5954,7 +6220,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="non streamable - with conv. op">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           s == &quot;7&quot;
         </Original>
@@ -5965,7 +6231,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Comparing function pointers">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           a
         </Original>
@@ -5973,7 +6239,7 @@
           true
         </Expanded>
       </Expression>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           a == &amp;foo
         </Original>
@@ -5984,7 +6250,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="Comparing member function pointers">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           m == &amp;S::f
         </Original>
@@ -5997,7 +6263,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="pointer to class">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           p == 0
         </Original>
@@ -6008,7 +6274,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="null_ptr">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TrickyTests.cpp" >
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/TrickyTests.cpp" >
         <Original>
           ptr.get() == nullptr
         </Original>
@@ -6030,9 +6296,237 @@
     <TestCase name="X/level/1/b">
       <OverallResult success="true"/>
     </TestCase>
+    <TestCase name="toString( has_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == &quot;toString( has_toString )&quot;
+        </Original>
+        <Expanded>
+          &quot;toString( has_toString )&quot;
+==
+&quot;toString( has_toString )&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( has_maker )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == &quot;StringMaker&lt;has_maker>&quot;
+        </Original>
+        <Expanded>
+          &quot;StringMaker&lt;has_maker>&quot;
+==
+&quot;StringMaker&lt;has_maker>&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( has_maker_and_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( item ) == &quot;toString( has_maker_and_toString )&quot;
+        </Original>
+        <Expanded>
+          &quot;toString( has_maker_and_toString )&quot;
+==
+&quot;toString( has_maker_and_toString )&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == &quot;{ {?} }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ {?} }&quot; == &quot;{ {?} }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_maker )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == &quot;{ StringMaker&lt;has_maker> }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ StringMaker&lt;has_maker> }&quot;
+==
+&quot;{ StringMaker&lt;has_maker> }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="toString( vectors&lt;has_maker_and_toString )">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringWhich.cpp" >
+        <Original>
+          Catch::toString( v ) == &quot;{ StringMaker&lt;has_maker_and_toString> }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ StringMaker&lt;has_maker_and_toString> }&quot;
+==
+&quot;{ StringMaker&lt;has_maker_and_toString> }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="std::pair&lt;int,std::string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( value ) == &quot;{ 34, \&quot;xyzzy\&quot; }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 34, &quot;xyzzy&quot; }&quot; == &quot;{ 34, &quot;xyzzy&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="std::pair&lt;int,const std::string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString(value) == &quot;{ 34, \&quot;xyzzy\&quot; }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 34, &quot;xyzzy&quot; }&quot; == &quot;{ 34, &quot;xyzzy&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="std::vector&lt;std::pair&lt;std::string,int> > -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( pr ) == &quot;{ { \&quot;green\&quot;, 55 } }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ { &quot;green&quot;, 55 } }&quot;
+==
+&quot;{ { &quot;green&quot;, 55 } }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="pair&lt;pair&lt;int,const char *,pair&lt;std::string,int> > -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringPair.cpp" >
+        <Original>
+          Catch::toString( pair ) == &quot;{ { 42, \&quot;Arthur\&quot; }, { \&quot;Ford\&quot;, 24 } }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ { 42, &quot;Arthur&quot; }, { &quot;Ford&quot;, 24 } }&quot;
+==
+&quot;{ { 42, &quot;Arthur&quot; }, { &quot;Ford&quot;, 24 } }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;int> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{  }&quot;
+        </Original>
+        <Expanded>
+          &quot;{  }&quot; == &quot;{  }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ 42 }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 42 }&quot; == &quot;{ 42 }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ 42, 512 }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 42, 512 }&quot; == &quot;{ 42, 512 }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;string> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{  }&quot;
+        </Original>
+        <Expanded>
+          &quot;{  }&quot; == &quot;{  }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ \&quot;hello\&quot; }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ &quot;hello&quot; }&quot; == &quot;{ &quot;hello&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ \&quot;hello\&quot;, \&quot;world\&quot; }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ &quot;hello&quot;, &quot;world&quot; }&quot;
+==
+&quot;{ &quot;hello&quot;, &quot;world&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vector&lt;int,allocator> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{  }&quot;
+        </Original>
+        <Expanded>
+          &quot;{  }&quot; == &quot;{  }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ 42 }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 42 }&quot; == &quot;{ 42 }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(vv) == &quot;{ 42, 512 }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ 42, 512 }&quot; == &quot;{ 42, 512 }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="vec&lt;vec&lt;string,alloc>> -> toString">
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(v) == &quot;{  }&quot;
+        </Original>
+        <Expanded>
+          &quot;{  }&quot; == &quot;{  }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="REQUIRE" filename="projects/SelfTest/ToStringVector.cpp" >
+        <Original>
+          Catch::toString(v) == &quot;{ { \&quot;hello\&quot; }, { \&quot;world\&quot; } }&quot;
+        </Original>
+        <Expanded>
+          &quot;{ { &quot;hello&quot; }, { &quot;world&quot; } }&quot;
+==
+&quot;{ { &quot;hello&quot; }, { &quot;world&quot; } }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Parse test names and tags">
       <Section name="Empty test spec should have no filters">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == false
           </Original>
@@ -6040,7 +6534,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6048,7 +6542,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6059,7 +6553,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Test spec from empty string should have no filters">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == false
           </Original>
@@ -6067,7 +6561,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches(tcA ) == false
           </Original>
@@ -6075,7 +6569,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6086,7 +6580,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Test spec from just a comma should have no filters">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == false
           </Original>
@@ -6094,7 +6588,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6102,7 +6596,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6113,7 +6607,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Test spec from name should have one filter">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6121,7 +6615,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6129,7 +6623,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6140,7 +6634,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Test spec from quoted name should have one filter">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6148,7 +6642,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6156,7 +6650,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6167,7 +6661,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Test spec from name should have one filter">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6175,7 +6669,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6183,7 +6677,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6191,7 +6685,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6202,7 +6696,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Wildcard at the start">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6210,7 +6704,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6218,7 +6712,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6226,7 +6720,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6234,7 +6728,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -6242,7 +6736,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             parseTestSpec( &quot;*a&quot; ).matches( tcA ) == true
           </Original>
@@ -6253,7 +6747,7 @@
         <OverallResults successes="6" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Wildcard at the end">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6261,7 +6755,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6269,7 +6763,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6277,7 +6771,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6285,7 +6779,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -6293,7 +6787,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             parseTestSpec( &quot;a*&quot; ).matches( tcA ) == true
           </Original>
@@ -6304,7 +6798,7 @@
         <OverallResults successes="6" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Wildcard at both ends">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6312,7 +6806,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6320,7 +6814,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6328,7 +6822,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6336,7 +6830,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6344,7 +6838,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             parseTestSpec( &quot;*a*&quot; ).matches( tcA ) == true
           </Original>
@@ -6355,7 +6849,7 @@
         <OverallResults successes="6" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Redundant wildcard at the start">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6363,7 +6857,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6371,7 +6865,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6382,7 +6876,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Redundant wildcard at the end">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6390,7 +6884,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6398,7 +6892,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6409,7 +6903,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Redundant wildcard at both ends">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6417,7 +6911,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6425,7 +6919,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6436,7 +6930,7 @@
         <OverallResults successes="3" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Wildcard at both ends, redundant at start">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6444,7 +6938,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6452,7 +6946,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6460,7 +6954,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6468,7 +6962,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6479,7 +6973,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Just wildcard">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6487,7 +6981,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6495,7 +6989,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6503,7 +6997,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6511,7 +7005,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6522,7 +7016,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Single tag">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6530,7 +7024,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6538,7 +7032,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6546,7 +7040,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6557,7 +7051,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Single tag, two matches">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6565,7 +7059,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6573,7 +7067,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6581,7 +7075,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6592,7 +7086,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Two tags">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6600,7 +7094,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6608,7 +7102,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6616,7 +7110,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6627,7 +7121,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Two tags, spare separated">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6635,7 +7129,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6643,7 +7137,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6651,7 +7145,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6662,7 +7156,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Wildcarded name and tag">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6670,7 +7164,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6678,7 +7172,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6686,7 +7180,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6694,7 +7188,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -6705,7 +7199,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Single tag exclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6713,7 +7207,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6721,7 +7215,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6729,7 +7223,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6740,7 +7234,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="One tag exclusion and one tag inclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6748,7 +7242,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6756,7 +7250,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6764,7 +7258,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6775,7 +7269,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="One tag exclusion and one wldcarded name inclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6783,7 +7277,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6791,7 +7285,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6799,7 +7293,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6807,7 +7301,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6818,7 +7312,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="One tag exclusion, using exclude:, and one wldcarded name inclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6826,7 +7320,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -6834,7 +7328,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6842,7 +7336,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6850,7 +7344,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6861,7 +7355,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="name exclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6869,7 +7363,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6877,7 +7371,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -6885,7 +7379,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6893,7 +7387,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -6904,7 +7398,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="wildcarded name exclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6912,7 +7406,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6920,7 +7414,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6928,7 +7422,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -6936,7 +7430,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -6947,7 +7441,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="wildcarded name exclusion with tag inclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6955,7 +7449,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -6963,7 +7457,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -6971,7 +7465,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -6979,7 +7473,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -6990,7 +7484,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="wildcarded name exclusion, using exclude:, with tag inclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -6998,7 +7492,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == true
           </Original>
@@ -7006,7 +7500,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == true
           </Original>
@@ -7014,7 +7508,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -7022,7 +7516,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -7033,7 +7527,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="two wildcarded names">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -7041,7 +7535,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -7049,7 +7543,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -7057,7 +7551,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == true
           </Original>
@@ -7065,7 +7559,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -7076,7 +7570,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="empty tag">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == false
           </Original>
@@ -7084,7 +7578,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -7092,7 +7586,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -7100,7 +7594,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -7108,7 +7602,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -7119,7 +7613,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="empty quoted name">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == false
           </Original>
@@ -7127,7 +7621,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -7135,7 +7629,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -7143,7 +7637,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -7151,7 +7645,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == false
           </Original>
@@ -7162,7 +7656,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="quoted string followed by tag exclusion">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.hasFilters() == true
           </Original>
@@ -7170,7 +7664,7 @@
             true == true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcA ) == false
           </Original>
@@ -7178,7 +7672,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcB ) == false
           </Original>
@@ -7186,7 +7680,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcC ) == false
           </Original>
@@ -7194,7 +7688,7 @@
             false == false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/CmdLineTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/CmdLineTests.cpp" >
           <Original>
             spec.matches( tcD ) == true
           </Original>
@@ -7206,9 +7700,97 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
+    <TestCase name="tuple&lt;>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ }&quot; == Catch::toString(type{})
+        </Original>
+        <Expanded>
+          &quot;{ }&quot; == &quot;{ }&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ }&quot; == Catch::toString(value)
+        </Original>
+        <Expanded>
+          &quot;{ }&quot; == &quot;{ }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;int>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ 0 }&quot; == Catch::toString(type{0})
+        </Original>
+        <Expanded>
+          &quot;{ 0 }&quot; == &quot;{ 0 }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;float,int>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;1.2f&quot; == Catch::toString(float(1.2))
+        </Original>
+        <Expanded>
+          &quot;1.2f&quot; == &quot;1.2f&quot;
+        </Expanded>
+      </Expression>
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ 1.2f, 0 }&quot; == Catch::toString(type{1.2,0})
+        </Original>
+        <Expanded>
+          &quot;{ 1.2f, 0 }&quot; == &quot;{ 1.2f, 0 }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;string,string>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ \&quot;hello\&quot;, \&quot;world\&quot; }&quot; == Catch::toString(type{&quot;hello&quot;,&quot;world&quot;})
+        </Original>
+        <Expanded>
+          &quot;{ &quot;hello&quot;, &quot;world&quot; }&quot;
+==
+&quot;{ &quot;hello&quot;, &quot;world&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;tuple&lt;int>,tuple&lt;>,float>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ { 42 }, { }, 1.2f }&quot; == Catch::toString(value)
+        </Original>
+        <Expanded>
+          &quot;{ { 42 }, { }, 1.2f }&quot;
+==
+&quot;{ { 42 }, { }, 1.2f }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
+    <TestCase name="tuple&lt;nullptr,int,const char *>">
+      <Expression success="true" type="CHECK" filename="projects/SelfTest/ToStringTuple.cpp" >
+        <Original>
+          &quot;{ nullptr, 42, \&quot;Catch me\&quot; }&quot; == Catch::toString(value)
+        </Original>
+        <Expanded>
+          &quot;{ nullptr, 42, &quot;Catch me&quot; }&quot;
+==
+&quot;{ nullptr, 42, &quot;Catch me&quot; }&quot;
+        </Expanded>
+      </Expression>
+      <OverallResult success="true"/>
+    </TestCase>
     <TestCase name="Tag alias can be registered against tag patterns">
       <Section name="The same tag alias can only be registered once">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             what Contains( &quot;[@zzz]&quot; )
           </Original>
@@ -7218,7 +7800,7 @@
 	Redefined at file:10&quot; contains: &quot;[@zzz]&quot;
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             what Contains( &quot;file&quot; )
           </Original>
@@ -7228,7 +7810,7 @@
 	Redefined at file:10&quot; contains: &quot;file&quot;
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             what Contains( &quot;2&quot; )
           </Original>
@@ -7238,7 +7820,7 @@
 	Redefined at file:10&quot; contains: &quot;2&quot;
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THAT" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             what Contains( &quot;10&quot; )
           </Original>
@@ -7251,7 +7833,7 @@
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Tag aliases must be of the form [@name]">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             registry.add( &quot;[no ampersat]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Original>
@@ -7259,7 +7841,7 @@
             registry.add( &quot;[no ampersat]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             registry.add( &quot;[the @ is not at the start]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Original>
@@ -7267,7 +7849,7 @@
             registry.add( &quot;[the @ is not at the start]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             registry.add( &quot;@no square bracket at start]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Original>
@@ -7275,7 +7857,7 @@
             registry.add( &quot;@no square bracket at start]&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/TagAliasTests.cpp" >
+        <Expression success="true" type="CHECK_THROWS" filename="projects/SelfTest/TagAliasTests.cpp" >
           <Original>
             registry.add( &quot;[@no square bracket at end&quot;, &quot;&quot;, Catch::SourceLineInfo( &quot;file&quot;, 3 ) )
           </Original>
@@ -7303,7 +7885,7 @@
       <Section name="Given: This stuff exists">
         <Section name="When: I do this">
           <Section name="Then: it should do this">
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 itDoesThis()
               </Original>
@@ -7312,7 +7894,7 @@
               </Expanded>
             </Expression>
             <Section name="And: do that">
-              <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+              <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
                 <Original>
                   itDoesThat()
                 </Original>
@@ -7332,7 +7914,7 @@
     </TestCase>
     <TestCase name="Scenario: Vector resizing affects size and capacity">
       <Section name="Given: an empty vector">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
           <Original>
             v.size() == 0
           </Original>
@@ -7342,7 +7924,7 @@
         </Expression>
         <Section name="When: it is made larger">
           <Section name="Then: the size and capacity go up">
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 v.size() == 10
               </Original>
@@ -7350,7 +7932,7 @@
                 10 == 10
               </Expanded>
             </Expression>
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 v.capacity() >= 10
               </Original>
@@ -7360,7 +7942,7 @@
             </Expression>
             <Section name="And when: it is made smaller again">
               <Section name="Then: the size goes down but the capacity stays the same">
-                <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+                <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
                   <Original>
                     v.size() == 5
                   </Original>
@@ -7368,7 +7950,7 @@
                     5 == 5
                   </Expanded>
                 </Expression>
-                <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+                <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
                   <Original>
                     v.capacity() >= 10
                   </Original>
@@ -7387,7 +7969,7 @@
         <OverallResults successes="5" failures="0" expectedFailures="0"/>
       </Section>
       <Section name="Given: an empty vector">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
           <Original>
             v.size() == 0
           </Original>
@@ -7397,7 +7979,7 @@
         </Expression>
         <Section name="When: we reserve more space">
           <Section name="Then: The capacity is increased but the size remains the same">
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 v.capacity() >= 10
               </Original>
@@ -7405,7 +7987,7 @@
                 10 >= 10
               </Expanded>
             </Expression>
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 v.size() == 0
               </Original>
@@ -7435,7 +8017,7 @@
     </TestCase>
     <TestCase name="Scenario: BDD tests requiring Fixtures to provide commonly-accessed data or methods">
       <Section name="Given: No operations precede me">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+        <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
           <Original>
             before == 0
           </Original>
@@ -7445,7 +8027,7 @@
         </Expression>
         <Section name="When: We get the count">
           <Section name="Then: Subsequently values are higher">
-            <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/BDDTests.cpp" >
+            <Expression success="true" type="REQUIRE" filename="projects/SelfTest/BDDTests.cpp" >
               <Original>
                 after > before
               </Original>
@@ -7462,7 +8044,7 @@
       <OverallResult success="true"/>
     </TestCase>
     <TestCase name="section tracking">
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+      <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
         <Original>
           !testCaseTracker.isCompleted()
         </Original>
@@ -7471,7 +8053,7 @@
         </Expanded>
       </Expression>
       <Section name="test case with no sections">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.isCompleted()
           </Original>
@@ -7479,7 +8061,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.isCompleted()
           </Original>
@@ -7489,7 +8071,7 @@
         </Expression>
         <OverallResults successes="2" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+      <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
         <Original>
           !testCaseTracker.isCompleted()
         </Original>
@@ -7498,7 +8080,7 @@
         </Expanded>
       </Expression>
       <Section name="test case with one section">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.enterSection( section1Name )
           </Original>
@@ -7506,7 +8088,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.isCompleted()
           </Original>
@@ -7514,7 +8096,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.isCompleted()
           </Original>
@@ -7522,7 +8104,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.enterSection( section1Name )
           </Original>
@@ -7532,7 +8114,7 @@
         </Expression>
         <OverallResults successes="4" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+      <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
         <Original>
           !testCaseTracker.isCompleted()
         </Original>
@@ -7541,7 +8123,7 @@
         </Expanded>
       </Expression>
       <Section name="test case with two consecutive sections">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.enterSection( section1Name )
           </Original>
@@ -7549,7 +8131,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.enterSection( section2Name )
           </Original>
@@ -7557,7 +8139,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.isCompleted()
           </Original>
@@ -7565,7 +8147,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.enterSection( section1Name )
           </Original>
@@ -7573,7 +8155,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.enterSection( section2Name )
           </Original>
@@ -7581,7 +8163,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.isCompleted()
           </Original>
@@ -7591,7 +8173,7 @@
         </Expression>
         <OverallResults successes="6" failures="0" expectedFailures="0"/>
       </Section>
-      <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+      <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
         <Original>
           !testCaseTracker.isCompleted()
         </Original>
@@ -7600,7 +8182,7 @@
         </Expanded>
       </Expression>
       <Section name="test case with one section within another">
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.enterSection( section1Name )
           </Original>
@@ -7608,7 +8190,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.enterSection( section2Name )
           </Original>
@@ -7616,7 +8198,7 @@
             true
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK_FALSE" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             !testCaseTracker.isCompleted()
           </Original>
@@ -7624,7 +8206,7 @@
             !false
           </Expanded>
         </Expression>
-        <Expression success="true" filename="/Users/philnash/Dev/OSS/Catch3/projects/SelfTest/SectionTrackerTests.cpp" >
+        <Expression success="true" type="CHECK" filename="projects/SelfTest/SectionTrackerTests.cpp" >
           <Original>
             testCaseTracker.isCompleted()
           </Original>
@@ -7636,7 +8218,7 @@
       </Section>
       <OverallResult success="true"/>
     </TestCase>
-    <OverallResults successes="617" failures="99" expectedFailures="13"/>
+    <OverallResults successes="673" failures="99" expectedFailures="13"/>
   </Group>
-  <OverallResults successes="617" failures="99" expectedFailures="13"/>
+  <OverallResults successes="673" failures="99" expectedFailures="13"/>
 </Catch>
diff --git a/projects/SelfTest/EnumToString.cpp b/projects/SelfTest/EnumToString.cpp
new file mode 100644
index 0000000..6917d8a
--- /dev/null
+++ b/projects/SelfTest/EnumToString.cpp
@@ -0,0 +1,76 @@
+#include "catch.hpp"
+
+/*
+  TODO: maybe ought to check that user-provided specialisations of
+ Catch::toString also do the right thing
+*/
+
+// Enum without user-provided stream operator
+enum Enum1 { Enum1Value0, Enum1Value1 };
+
+TEST_CASE( "toString(enum)", "[toString][enum]" ) {
+    Enum1 e0 = Enum1Value0;
+    CHECK( Catch::toString(e0) == "0" );
+    Enum1 e1 = Enum1Value1;
+    CHECK( Catch::toString(e1) == "1" );
+}
+
+// Enum with user-provided stream operator
+enum Enum2 { Enum2Value0, Enum2Value1 };
+
+inline std::ostream& operator<<( std::ostream& os, Enum2 v ) {
+    return os << "E2{" << static_cast<int>(v) << "}";
+}
+
+TEST_CASE( "toString(enum w/operator<<)", "[toString][enum]" ) {
+    Enum2 e0 = Enum2Value0;
+    CHECK( Catch::toString(e0) == "E2{0}" );
+    Enum2 e1 = Enum2Value1;
+    CHECK( Catch::toString(e1) == "E2{1}" );
+}
+
+#if defined(CATCH_CPP11_OR_GREATER)
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+// Enum class without user-provided stream operator
+enum class EnumClass1 { EnumClass1Value0, EnumClass1Value1 };
+
+TEST_CASE( "toString(enum class)", "[toString][enum][enumClass]" ) {
+    EnumClass1 e0 = EnumClass1::EnumClass1Value0;
+    CHECK( Catch::toString(e0) == "0" );
+    EnumClass1 e1 = EnumClass1::EnumClass1Value1;
+    CHECK( Catch::toString(e1) == "1" );
+}
+
+// Enum class with user-provided stream operator
+enum class EnumClass2 : short { EnumClass2Value0, EnumClass2Value1 };
+
+inline std::ostream& operator<<( std::ostream& os, EnumClass2 e2 ) {
+    switch( static_cast<int>( e2 ) ) {
+        case static_cast<int>( EnumClass2::EnumClass2Value0 ):
+            return os << "E2/V0";
+        case static_cast<int>( EnumClass2::EnumClass2Value1 ):
+            return os << "E2/V1";
+        default:
+            return os << "Unknown enum value " << static_cast<int>( e2 );
+    }
+}
+
+TEST_CASE( "toString(enum class w/operator<<)", "[toString][enum][enumClass]" ) {
+    EnumClass2 e0 = EnumClass2::EnumClass2Value0;
+    CHECK( Catch::toString(e0) == "E2/V0" );
+    EnumClass2 e1 = EnumClass2::EnumClass2Value1;
+    CHECK( Catch::toString(e1) == "E2/V1" );
+
+    EnumClass2 e3 = static_cast<EnumClass2>(10);
+    CHECK( Catch::toString(e3) == "Unknown enum value 10" );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+#endif // CATCH_CPP11_OR_GREATER
+
diff --git a/projects/SelfTest/MiscTests.cpp b/projects/SelfTest/MiscTests.cpp
index b229c76..86bd4f3 100644
--- a/projects/SelfTest/MiscTests.cpp
+++ b/projects/SelfTest/MiscTests.cpp
@@ -380,3 +380,9 @@
 	std::string result = Catch::toString( s );
 	CHECK( result == "\"wide load\"" );
 }
+
+//TEST_CASE( "Divide by Zero signal handler", "[.][sig]" ) {
+//    int i = 0;
+//    int x = 10/i; // This should cause the signal to fire
+//    CHECK( x == 0 );
+//}
diff --git a/projects/SelfTest/TestMain.cpp b/projects/SelfTest/TestMain.cpp
index edc8aa1..7cb7ca4 100644
--- a/projects/SelfTest/TestMain.cpp
+++ b/projects/SelfTest/TestMain.cpp
@@ -8,6 +8,7 @@
 
 #define CATCH_CONFIG_MAIN
 #include "catch.hpp"
+#include "reporters/catch_reporter_teamcity.hpp"
 
 // Some example tag aliases
 CATCH_REGISTER_TAG_ALIAS( "[@nhf]", "[failing]~[.]" )
@@ -181,7 +182,23 @@
             CHECK( config.shouldDebugBreak );
             CHECK( config.noThrow == true );
         }
-    }        
+    }
+
+    SECTION( "force-colour", "") {
+        SECTION( "--force-colour", "" ) {
+            const char* argv[] = { "test", "--force-colour" };
+            CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+            REQUIRE( config.forceColour );
+        }
+
+        SECTION( "without --force-colour", "" ) {
+            const char* argv[] = { "test" };
+            CHECK_NOTHROW( parseIntoConfig( argv, config ) );
+
+            REQUIRE( !config.forceColour );
+        }
+    }
 }
 
 
@@ -347,22 +364,55 @@
     std::vector<ColourIndex> colours;
 };
 
+TEST_CASE( "replaceInPlace", "" ) {
+    std::string letters = "abcdefcg";
+    SECTION( "replace single char" ) {
+        CHECK( replaceInPlace( letters, "b", "z" ) );
+        CHECK( letters == "azcdefcg" );
+    }
+    SECTION( "replace two chars" ) {
+        CHECK( replaceInPlace( letters, "c", "z" ) );
+        CHECK( letters == "abzdefzg" );
+    }
+    SECTION( "replace first char" ) {
+        CHECK( replaceInPlace( letters, "a", "z" ) );
+        CHECK( letters == "zbcdefcg" );
+    }
+    SECTION( "replace last char" ) {
+        CHECK( replaceInPlace( letters, "g", "z" ) );
+        CHECK( letters == "abcdefcz" );
+    }
+    SECTION( "replace all chars" ) {
+        CHECK( replaceInPlace( letters, letters, "replaced" ) );
+        CHECK( letters == "replaced" );
+    }
+    SECTION( "replace no chars" ) {
+        CHECK_FALSE( replaceInPlace( letters, "x", "z" ) );
+        CHECK( letters == letters );
+    }
+    SECTION( "escape '" ) {
+        std::string s = "didn't";
+        CHECK( replaceInPlace( s, "'", "|'" ) );
+        CHECK( s == "didn|'t" );
+    }
+}
+
 // !TBD: This will be folded into Text class
-TEST_CASE( "Strings can be rendered with colour", "[colour][.]" ) {
+TEST_CASE( "Strings can be rendered with colour", "[.colour]" ) {
     
     {
         ColourString cs( "hello" );
         cs  .addColour( Colour::Red, 0 )
             .addColour( Colour::Green, -1 );
 
-        std::cout << cs << std::endl;
+        Catch::cout() << cs << std::endl;
     }
 
     {
         ColourString cs( "hello" );
         cs  .addColour( Colour::Blue, 1, -2 );
         
-        std::cout << cs << std::endl;
+        Catch::cout() << cs << std::endl;
     }
     
 }
diff --git a/projects/SelfTest/ToStringPair.cpp b/projects/SelfTest/ToStringPair.cpp
new file mode 100644
index 0000000..8f51070
--- /dev/null
+++ b/projects/SelfTest/ToStringPair.cpp
@@ -0,0 +1,47 @@
+#include "catch.hpp"
+
+// === Pair ===
+namespace Catch {
+    // Note: If we put this in the right place in catch_tostring, then
+    // we can make it an overload of Catch::toString
+    template<typename T1, typename T2>
+    struct StringMaker<std::pair<T1,T2> > {
+        static std::string convert( const std::pair<T1,T2>& pair ) {
+            std::ostringstream oss;
+            oss << "{ "
+                << toString( pair.first )
+                << ", "
+                << toString( pair.second )
+                << " }";
+            return oss.str();
+        }
+    };
+}
+
+TEST_CASE( "std::pair<int,std::string> -> toString", "[toString][pair]" ) {
+    std::pair<int,std::string> value( 34, "xyzzy" );
+    REQUIRE( Catch::toString( value ) == "{ 34, \"xyzzy\" }" );
+}
+
+TEST_CASE( "std::pair<int,const std::string> -> toString", "[toString][pair]" ) {
+    std::pair<int,const std::string> value( 34, "xyzzy" );
+    REQUIRE( Catch::toString(value) == "{ 34, \"xyzzy\" }" );
+}
+
+TEST_CASE( "std::vector<std::pair<std::string,int> > -> toString", "[toString][pair]" ) {
+    std::vector<std::pair<std::string,int> > pr;
+    pr.push_back( std::make_pair("green", 55 ) );
+    REQUIRE( Catch::toString( pr ) == "{ { \"green\", 55 } }" );
+}
+
+// This is pretty contrived - I figure if this works, anything will...
+TEST_CASE( "pair<pair<int,const char *,pair<std::string,int> > -> toString", "[toString][pair]" ) {
+    typedef std::pair<int,const char *> left_t;
+    typedef std::pair<std::string,int> right_t;
+
+    left_t  left( 42, "Arthur" );
+    right_t right( "Ford", 24 );
+
+    std::pair<left_t,right_t> pair( left, right );
+    REQUIRE( Catch::toString( pair ) == "{ { 42, \"Arthur\" }, { \"Ford\", 24 } }" );
+}
diff --git a/projects/SelfTest/ToStringTuple.cpp b/projects/SelfTest/ToStringTuple.cpp
new file mode 100644
index 0000000..012ee66
--- /dev/null
+++ b/projects/SelfTest/ToStringTuple.cpp
@@ -0,0 +1,48 @@
+#include "catch.hpp"
+
+#ifdef CATCH_CPP11_OR_GREATER
+
+TEST_CASE( "tuple<>", "[toString][tuple]" )
+{
+    typedef std::tuple<> type;
+    CHECK( "{ }" == Catch::toString(type{}) );
+    type value {};
+    CHECK( "{ }" == Catch::toString(value) );
+}
+
+TEST_CASE( "tuple<int>", "[toString][tuple]" )
+{
+    typedef std::tuple<int> type;
+    CHECK( "{ 0 }" == Catch::toString(type{0}) );
+}
+
+
+TEST_CASE( "tuple<float,int>", "[toString][tuple]" )
+{
+    typedef std::tuple<float,int> type;
+    CHECK( "1.2f" == Catch::toString(float(1.2)) );
+    CHECK( "{ 1.2f, 0 }" == Catch::toString(type{1.2,0}) );
+}
+
+TEST_CASE( "tuple<string,string>", "[toString][tuple]" )
+{
+    typedef std::tuple<std::string,std::string> type;
+    CHECK( "{ \"hello\", \"world\" }" == Catch::toString(type{"hello","world"}) );
+}
+
+TEST_CASE( "tuple<tuple<int>,tuple<>,float>", "[toString][tuple]" )
+{
+    typedef std::tuple<std::tuple<int>,std::tuple<>,float> type;
+    type value { std::tuple<int>{42}, {}, 1.2f };
+    CHECK( "{ { 42 }, { }, 1.2f }" == Catch::toString(value) );
+}
+
+TEST_CASE( "tuple<nullptr,int,const char *>", "[toString][tuple]" )
+{
+    typedef std::tuple<std::nullptr_t,int,const char *> type;
+    type value { nullptr, 42, "Catch me" };
+    CHECK( "{ nullptr, 42, \"Catch me\" }" == Catch::toString(value) );
+}
+
+#endif /* #ifdef CATCH_CPP11_OR_GREATER */
+
diff --git a/projects/SelfTest/ToStringVector.cpp b/projects/SelfTest/ToStringVector.cpp
new file mode 100644
index 0000000..4479060
--- /dev/null
+++ b/projects/SelfTest/ToStringVector.cpp
@@ -0,0 +1,77 @@
+#include "catch.hpp"
+#include <vector>
+
+
+// vedctor
+TEST_CASE( "vector<int> -> toString", "[toString][vector]" )
+{
+    std::vector<int> vv;
+    REQUIRE( Catch::toString(vv) == "{  }" );
+    vv.push_back( 42 );
+    REQUIRE( Catch::toString(vv) == "{ 42 }" );
+    vv.push_back( 512 );
+    REQUIRE( Catch::toString(vv) == "{ 42, 512 }" );
+}
+
+TEST_CASE( "vector<string> -> toString", "[toString][vector]" )
+{
+    std::vector<std::string> vv;
+    REQUIRE( Catch::toString(vv) == "{  }" );
+    vv.push_back( "hello" );
+    REQUIRE( Catch::toString(vv) == "{ \"hello\" }" );
+    vv.push_back( "world" );
+    REQUIRE( Catch::toString(vv) == "{ \"hello\", \"world\" }" );
+}
+
+#if defined(CATCH_CPP11_OR_GREATER)
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc++98-compat"
+#endif
+
+/*
+  Note: These tests *can* be made to work with C++ < 11, but the
+  allocator is a lot more work...
+*/
+namespace {
+    /* Minimal Allocator */
+    template<typename T>
+    struct minimal_allocator {
+        typedef T value_type;
+        typedef std::size_t size_type;
+        T *allocate( size_type n ) {
+            return static_cast<T *>( ::operator new( n * sizeof(T) ) );
+        }
+        void deallocate( T *p, size_type /*n*/ ) {
+            ::operator delete( static_cast<void *>(p) );
+        }
+        template<typename U>
+        bool operator==( const minimal_allocator<U>& ) const { return true; }
+        template<typename U>
+        bool operator!=( const minimal_allocator<U>& ) const { return false; }
+    };
+}
+
+TEST_CASE( "vector<int,allocator> -> toString", "[toString][vector,allocator]" ) {
+    std::vector<int,minimal_allocator<int> > vv;
+    REQUIRE( Catch::toString(vv) == "{  }" );
+    vv.push_back( 42 );
+    REQUIRE( Catch::toString(vv) == "{ 42 }" );
+    vv.push_back( 512 );
+    REQUIRE( Catch::toString(vv) == "{ 42, 512 }" );
+}
+
+TEST_CASE( "vec<vec<string,alloc>> -> toString", "[toString][vector,allocator]" ) {
+    typedef std::vector<std::string,minimal_allocator<std::string> > inner;
+    typedef std::vector<inner> vector;
+    vector v;
+    REQUIRE( Catch::toString(v) == "{  }" );
+    v.push_back( inner { "hello" } );
+    v.push_back( inner { "world" } );
+    REQUIRE( Catch::toString(v) == "{ { \"hello\" }, { \"world\" } }" );
+}
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
+#endif // CATCH_CPP11_OR_GREATER
diff --git a/projects/SelfTest/ToStringWhich.cpp b/projects/SelfTest/ToStringWhich.cpp
new file mode 100644
index 0000000..1d4aa89
--- /dev/null
+++ b/projects/SelfTest/ToStringWhich.cpp
@@ -0,0 +1,68 @@
+#include "catch.hpp"
+/*
+    Demonstrate which version of toString/StringMaker is being used
+    for various types
+*/
+
+
+struct has_toString { };
+struct has_maker {};
+struct has_maker_and_toString {};
+
+namespace Catch {
+    inline std::string toString( const has_toString& ) {
+        return "toString( has_toString )";
+    }
+    inline std::string toString( const has_maker_and_toString& ) {
+        return "toString( has_maker_and_toString )";
+    }
+    template<>
+    struct StringMaker<has_maker> {
+        static std::string convert( const has_maker& ) {
+            return "StringMaker<has_maker>";
+        }
+    };
+    template<>
+    struct StringMaker<has_maker_and_toString> {
+        static std::string convert( const has_maker_and_toString& ) {
+            return "StringMaker<has_maker_and_toString>";
+        }
+    };
+}
+
+// Call the overload
+TEST_CASE( "toString( has_toString )", "[toString]" ) {
+    has_toString item;
+    REQUIRE( Catch::toString( item ) == "toString( has_toString )" );
+}
+
+// Call the overload
+TEST_CASE( "toString( has_maker )", "[toString]" ) {
+    has_maker item;
+    REQUIRE( Catch::toString( item ) == "StringMaker<has_maker>" );
+}
+
+// Call the overload
+TEST_CASE( "toString( has_maker_and_toString )", "[toString]" ) {
+    has_maker_and_toString item;
+    REQUIRE( Catch::toString( item ) == "toString( has_maker_and_toString )" );
+}
+
+// Vectors...
+TEST_CASE( "toString( vectors<has_toString )", "[toString]" ) {
+    std::vector<has_toString> v(1);
+    // This invokes template<T> toString which actually gives us '{ ? }'
+    REQUIRE( Catch::toString( v ) == "{ {?} }" );
+}
+
+TEST_CASE( "toString( vectors<has_maker )", "[toString]" ) {
+    std::vector<has_maker> v(1);
+    REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker> }" );
+}
+
+
+TEST_CASE( "toString( vectors<has_maker_and_toString )", "[toString]" ) {
+    std::vector<has_maker_and_toString> v(1);
+    // Note: This invokes the template<T> toString -> StringMaker
+    REQUIRE( Catch::toString( v ) == "{ StringMaker<has_maker_and_toString> }" );
+}
diff --git a/projects/SelfTest/TrickyTests.cpp b/projects/SelfTest/TrickyTests.cpp
index a167657..462718d 100644
--- a/projects/SelfTest/TrickyTests.cpp
+++ b/projects/SelfTest/TrickyTests.cpp
@@ -44,7 +44,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 TEST_CASE
 (
-    "Where the is more to the expression after the RHS[failing]",
+    "Where there is more to the expression after the RHS",
     "[Tricky][failing][.]"
 )
 {
@@ -55,7 +55,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 TEST_CASE
 (
-    "Where the LHS is not a simple value[failing]",
+    "Where the LHS is not a simple value",
     "[Tricky][failing][.]"
 )
 {
@@ -81,7 +81,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 TEST_CASE
 (
-    "A failing expression with a non streamable type is still captured[failing]",
+    "A failing expression with a non streamable type is still captured",
     "[Tricky][failing][.]"
 )
 {
@@ -97,7 +97,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 TEST_CASE
 (   
-    "string literals of different sizes can be compared[failing]",
+    "string literals of different sizes can be compared",
     "[Tricky][failing][.]"
 )
 {
diff --git a/projects/SelfTest/makefile b/projects/SelfTest/makefile
index f828c52..0a29372 100644
--- a/projects/SelfTest/makefile
+++ b/projects/SelfTest/makefile
@@ -1,14 +1,30 @@
+SOURCES = ApproxTests.cpp \
+          ClassTests.cpp \
+          ConditionTests.cpp \
+          ExceptionTests.cpp \
+          GeneratorTests.cpp \
+          MessageTests.cpp \
+          MiscTests.cpp \
+          TestMain.cpp \
+          TrickyTests.cpp \
+          BDDTests.cpp \
+          VariadicMacrosTests.cpp \
+          EnumToString.cpp \
+          ToStringPair.cpp \
+          ToStringVector.cpp \
+          ToStringWhich.cpp
 
-EXEC=CatchSelfTest
-SOURCES = $(wildcard *.cpp)
-OBJECTS = $(SOURCES:.cpp=.o)
 
+OBJECTS    = $(patsubst %.cpp, %.o, $(SOURCES))
 CXX = g++
-CXXFLAGS  = -I../../include -I../../include/internal
+CXXFLAGS  = -I../../include -std=c++11
 
-$(EXEC): $(OBJECTS)
+CatchSelfTest: $(OBJECTS)
 	$(CXX) -o $@ $^
 
+test: CatchSelfTest
+	./CatchSelfTest
+
 clean:
-	$(RM) $(OBJECTS)
-	$(RM) $(EXEC)
+	rm -f $(OBJECTS) CatchSelfTest
+
diff --git a/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj b/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj
index 31fc525..6658ca6 100644
--- a/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj
+++ b/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.pbxproj
@@ -7,11 +7,16 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		263F7A4719B6FCBF009474C2 /* EnumToString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4619B6FCBF009474C2 /* EnumToString.cpp */; };
+		263F7A4B19B6FE1E009474C2 /* ToStringPair.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */; };
+		263F7A4C19B6FE1E009474C2 /* ToStringVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */; };
+		263F7A4D19B6FE1E009474C2 /* ToStringWhich.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */; };
 		2656C2211925E7330040DB02 /* catch_test_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2656C2201925E7330040DB02 /* catch_test_spec.cpp */; };
 		266B06B816F3A60A004ED264 /* VariadicMacrosTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 266B06B616F3A60A004ED264 /* VariadicMacrosTests.cpp */; };
 		266ECD74170F3C620030D735 /* BDDTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 266ECD73170F3C620030D735 /* BDDTests.cpp */; };
 		26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26711C8D195D465C0033EDA2 /* TagAliasTests.cpp */; };
 		26847E5F16BBADB40043B9C1 /* catch_message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26847E5D16BBADB40043B9C1 /* catch_message.cpp */; };
+		2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2691574B1A532A280054F1ED /* ToStringTuple.cpp */; };
 		26948286179A9AB900ED166E /* SectionTrackerTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26948284179A9AB900ED166E /* SectionTrackerTests.cpp */; };
 		2694A1FD16A0000E004816E3 /* catch_text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2694A1FB16A0000E004816E3 /* catch_text.cpp */; };
 		26E1B7D319213BC900812682 /* CmdLineTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26E1B7D119213BC900812682 /* CmdLineTests.cpp */; };
@@ -66,6 +71,11 @@
 		2627F7061935B55F009BCE2D /* catch_result_builder.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_result_builder.hpp; sourceTree = "<group>"; };
 		262E7399184673A800CAC268 /* catch_reporter_bases.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_bases.hpp; sourceTree = "<group>"; };
 		262E739A1846759000CAC268 /* catch_common.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_common.hpp; sourceTree = "<group>"; };
+		263F7A4519A66608009474C2 /* catch_fatal_condition.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_fatal_condition.hpp; sourceTree = "<group>"; };
+		263F7A4619B6FCBF009474C2 /* EnumToString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnumToString.cpp; path = ../../../SelfTest/EnumToString.cpp; sourceTree = "<group>"; };
+		263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringPair.cpp; path = ../../../SelfTest/ToStringPair.cpp; sourceTree = "<group>"; };
+		263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringVector.cpp; path = ../../../SelfTest/ToStringVector.cpp; sourceTree = "<group>"; };
+		263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringWhich.cpp; path = ../../../SelfTest/ToStringWhich.cpp; sourceTree = "<group>"; };
 		263FD06017AF8DF200988A20 /* catch_timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_timer.hpp; sourceTree = "<group>"; };
 		263FD06117AF8DF200988A20 /* catch_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = catch_timer.h; sourceTree = "<group>"; };
 		2656C21F1925E5100040DB02 /* catch_test_spec_parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_test_spec_parser.hpp; sourceTree = "<group>"; };
@@ -87,6 +97,8 @@
 		26847E5C16BBACB60043B9C1 /* catch_message.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = catch_message.hpp; sourceTree = "<group>"; };
 		26847E5D16BBADB40043B9C1 /* catch_message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = catch_message.cpp; path = ../../../SelfTest/SurrogateCpps/catch_message.cpp; sourceTree = "<group>"; };
 		268F47B018A93F7800D8C14F /* catch_clara.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = catch_clara.h; sourceTree = "<group>"; };
+		2691574A1A4480C50054F1ED /* catch_reporter_teamcity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch_reporter_teamcity.hpp; sourceTree = "<group>"; };
+		2691574B1A532A280054F1ED /* ToStringTuple.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ToStringTuple.cpp; path = ../../../SelfTest/ToStringTuple.cpp; sourceTree = "<group>"; };
 		26926E8318D7777D004E10F2 /* clara.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = clara.h; path = ../../../../include/external/clara.h; sourceTree = "<group>"; };
 		26926E8418D77809004E10F2 /* tbc_text_format.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tbc_text_format.h; path = ../../../../include/external/tbc_text_format.h; sourceTree = "<group>"; };
 		26948284179A9AB900ED166E /* SectionTrackerTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SectionTrackerTests.cpp; path = ../../../SelfTest/SectionTrackerTests.cpp; sourceTree = "<group>"; };
@@ -246,6 +258,11 @@
 		4A6D0C40149B3DAB00DB3EAA /* Tests */ = {
 			isa = PBXGroup;
 			children = (
+				2691574B1A532A280054F1ED /* ToStringTuple.cpp */,
+				263F7A4819B6FE1E009474C2 /* ToStringPair.cpp */,
+				263F7A4919B6FE1E009474C2 /* ToStringVector.cpp */,
+				263F7A4A19B6FE1E009474C2 /* ToStringWhich.cpp */,
+				263F7A4619B6FCBF009474C2 /* EnumToString.cpp */,
 				266ECD73170F3C620030D735 /* BDDTests.cpp */,
 				4A6D0C36149B3D9E00DB3EAA /* TrickyTests.cpp */,
 				4A6D0C2D149B3D9E00DB3EAA /* ApproxTests.cpp */,
@@ -300,6 +317,7 @@
 				4A6D0C67149B3E3D00DB3EAA /* catch_reporter_junit.hpp */,
 				4A6D0C68149B3E3D00DB3EAA /* catch_reporter_xml.hpp */,
 				4AB42F84166F3E1A0099F2C8 /* catch_reporter_console.hpp */,
+				2691574A1A4480C50054F1ED /* catch_reporter_teamcity.hpp */,
 			);
 			name = reporters;
 			path = ../../../../include/reporters;
@@ -453,6 +471,7 @@
 				268F47B018A93F7800D8C14F /* catch_clara.h */,
 				2656C226192A77EF0040DB02 /* catch_suppress_warnings.h */,
 				2656C227192A78410040DB02 /* catch_reenable_warnings.h */,
+				263F7A4519A66608009474C2 /* catch_fatal_condition.hpp */,
 			);
 			name = Infrastructure;
 			sourceTree = "<group>";
@@ -492,7 +511,7 @@
 		4A6D0C17149B3D3B00DB3EAA /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastUpgradeCheck = 0500;
+				LastUpgradeCheck = 0600;
 			};
 			buildConfigurationList = 4A6D0C1A149B3D3B00DB3EAA /* Build configuration list for PBXProject "CatchSelfTest" */;
 			compatibilityVersion = "Xcode 3.2";
@@ -516,6 +535,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				263F7A4719B6FCBF009474C2 /* EnumToString.cpp in Sources */,
 				4A6D0C37149B3D9E00DB3EAA /* ApproxTests.cpp in Sources */,
 				4A6D0C38149B3D9E00DB3EAA /* ClassTests.cpp in Sources */,
 				4A6D0C39149B3D9E00DB3EAA /* ConditionTests.cpp in Sources */,
@@ -525,7 +545,10 @@
 				4A6D0C3D149B3D9E00DB3EAA /* MiscTests.cpp in Sources */,
 				4A6D0C3E149B3D9E00DB3EAA /* TestMain.cpp in Sources */,
 				4A6D0C3F149B3D9E00DB3EAA /* TrickyTests.cpp in Sources */,
+				263F7A4D19B6FE1E009474C2 /* ToStringWhich.cpp in Sources */,
+				263F7A4B19B6FE1E009474C2 /* ToStringPair.cpp in Sources */,
 				4AEE032016142F910071E950 /* catch_common.cpp in Sources */,
+				263F7A4C19B6FE1E009474C2 /* ToStringVector.cpp in Sources */,
 				4AEE032316142FC70071E950 /* catch_debugger.cpp in Sources */,
 				4AEE032516142FF10071E950 /* catch_stream.cpp in Sources */,
 				4AEE0328161434FD0071E950 /* catch_xmlwriter.cpp in Sources */,
@@ -538,6 +561,7 @@
 				4A45DA2D16161FA2004F8D6B /* catch_interfaces_capture.cpp in Sources */,
 				4A45DA3116161FFC004F8D6B /* catch_interfaces_reporter.cpp in Sources */,
 				4A45DA3316162047004F8D6B /* catch_interfaces_exception.cpp in Sources */,
+				2691574C1A532A280054F1ED /* ToStringTuple.cpp in Sources */,
 				26711C8F195D465C0033EDA2 /* TagAliasTests.cpp in Sources */,
 				4A45DA3516162071004F8D6B /* catch_interfaces_runner.cpp in Sources */,
 				4AB3D99D1616216500C9A0F8 /* catch_interfaces_testcase.cpp in Sources */,
@@ -564,9 +588,11 @@
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
 				COPY_PHASE_STRIP = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_DYNAMIC_NO_PIC = NO;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
@@ -613,10 +639,12 @@
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES;
 				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
 				CLANG_WARN__EXIT_TIME_DESTRUCTORS = NO;
 				COPY_PHASE_STRIP = YES;
 				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
 				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
diff --git a/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTest.xccheckout b/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTest.xccheckout
deleted file mode 100644
index 149325a..0000000
--- a/projects/XCode/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace/xcshareddata/CatchSelfTest.xccheckout
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>IDESourceControlProjectFavoriteDictionaryKey</key>
-	<false/>
-	<key>IDESourceControlProjectIdentifier</key>
-	<string>034502BF-F920-4DB6-82F5-71E61E50118C</string>
-	<key>IDESourceControlProjectName</key>
-	<string>CatchSelfTest</string>
-	<key>IDESourceControlProjectOriginsDictionary</key>
-	<dict>
-		<key>01DD8CA9-7DC3-46BC-B998-EFF40EA3485F</key>
-		<string>ssh://github.com/philsquared/Catch.git</string>
-	</dict>
-	<key>IDESourceControlProjectPath</key>
-	<string>projects/XCode4/CatchSelfTest/CatchSelfTest.xcodeproj/project.xcworkspace</string>
-	<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
-	<dict>
-		<key>01DD8CA9-7DC3-46BC-B998-EFF40EA3485F</key>
-		<string>../../../../..</string>
-	</dict>
-	<key>IDESourceControlProjectURL</key>
-	<string>ssh://github.com/philsquared/Catch.git</string>
-	<key>IDESourceControlProjectVersion</key>
-	<integer>110</integer>
-	<key>IDESourceControlProjectWCCIdentifier</key>
-	<string>01DD8CA9-7DC3-46BC-B998-EFF40EA3485F</string>
-	<key>IDESourceControlProjectWCConfigurations</key>
-	<array>
-		<dict>
-			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
-			<string>public.vcs.git</string>
-			<key>IDESourceControlWCCIdentifierKey</key>
-			<string>01DD8CA9-7DC3-46BC-B998-EFF40EA3485F</string>
-			<key>IDESourceControlWCCName</key>
-			<string>Catch</string>
-		</dict>
-	</array>
-</dict>
-</plist>
diff --git a/scripts/approvalTests.py b/scripts/approvalTests.py
index 329c99b..f2ffea5 100644
--- a/scripts/approvalTests.py
+++ b/scripts/approvalTests.py
@@ -9,8 +9,9 @@
 
 rootPath = os.path.join( catchPath, 'projects/SelfTest/Baselines' )
 
-filenameParser = re.compile( r'.*/(.*\..pp:)(.*)' )
+filenameParser = re.compile( r'(.*)/(.*\..pp:)(.*)' )
 filelineParser = re.compile( r'(.*\..pp:)([0-9]*)(.*)' )
+pathParser = re.compile( r'(.*?)/(.*\..pp)(.*)' )
 lineNumberParser = re.compile( r'(.*)line="[0-9]*"(.*)' )
 hexParser = re.compile( r'(.*)\b(0[xX][0-9a-fA-F]+)\b(.*)' )
 durationsParser = re.compile( r'(.*)time="[0-9]*\.[0-9]*"(.*)' )
@@ -26,14 +27,20 @@
 def filterLine( line ):
 	m = filenameParser.match( line )
 	if m:
-		line = m.group(1) + m.group(2)
-		m = filelineParser.match( line )
-		if m:
-			line = m.group(1) + "<line number>" + m.group(3)
+		line = m.group(2) + m.group(3)
+		m2 = filelineParser.match( line )
+		if m2:
+			line = m2.group(1) + "<line number>" + m2.group(3)
 	else:
-		m = lineNumberParser.match( line )
-		if m:
-			line = m.group(1) + m.group(2)
+		m2 = lineNumberParser.match( line )
+		if m2:
+			line = m2.group(1) + m2.group(2)
+	m = pathParser.match( line )
+	if m:
+		path = "/" + m.group(2)
+		if path.startswith( catchPath ):
+			path = path[1+len(catchPath):]
+		line = m.group(1) + path + m.group(3)
 	m = versionParser.match( line )
 	if m:
 		line = m.group(1) + "<version>" + m.group(2)
@@ -52,6 +59,8 @@
 def approve( baseName, args ):
 	global overallResult
 	args[0:0] = [cmdPath]
+	if not os.path.exists( cmdPath ):
+			raise Exception( "Executable doesn't exist at " + cmdPath )
 	baselinesPath = os.path.join( rootPath, '{0}.approved.txt'.format( baseName ) )
 	rawResultsPath = os.path.join( rootPath, '_{0}.tmp'.format( baseName ) )
 	filteredResultsPath = os.path.join( rootPath, '{0}.unapproved.txt'.format( baseName ) )
diff --git a/single_include/catch.hpp b/single_include/catch.hpp
index 6b8dfb5..2964790 100644
--- a/single_include/catch.hpp
+++ b/single_include/catch.hpp
@@ -1,6 +1,6 @@
 /*
- *  CATCH v1.0 build 53 (master branch)
- *  Generated: 2014-08-20 08:08:19.533804
+ *  CATCH v1.1 build 14 (develop branch)
+ *  Generated: 2015-03-04 18:32:24.627737
  *  ----------------------------------------------------------
  *  This file has been merged from multiple headers. Please don't edit it directly
  *  Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved.
@@ -18,26 +18,31 @@
 #define TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED
 
 #ifdef __clang__
-#pragma clang diagnostic ignored "-Wglobal-constructors"
-#pragma clang diagnostic ignored "-Wvariadic-macros"
-#pragma clang diagnostic ignored "-Wc99-extensions"
-#pragma clang diagnostic ignored "-Wunused-variable"
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wpadded"
-#pragma clang diagnostic ignored "-Wc++98-compat"
-#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#   ifdef __ICC // icpc defines the __clang__ macro
+#       pragma warning(push)
+#       pragma warning(disable: 161 1682)
+#   else // __ICC
+#       pragma clang diagnostic ignored "-Wglobal-constructors"
+#       pragma clang diagnostic ignored "-Wvariadic-macros"
+#       pragma clang diagnostic ignored "-Wc99-extensions"
+#       pragma clang diagnostic ignored "-Wunused-variable"
+#       pragma clang diagnostic push
+#       pragma clang diagnostic ignored "-Wpadded"
+#       pragma clang diagnostic ignored "-Wc++98-compat"
+#       pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
+#    endif
 #elif defined __GNUC__
-#pragma GCC diagnostic ignored "-Wvariadic-macros"
-#pragma GCC diagnostic ignored "-Wunused-variable"
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wpadded"
+#    pragma GCC diagnostic ignored "-Wvariadic-macros"
+#    pragma GCC diagnostic ignored "-Wunused-variable"
+#    pragma GCC diagnostic push
+#    pragma GCC diagnostic ignored "-Wpadded"
 #endif
 
-#ifdef CATCH_CONFIG_MAIN
-#  define CATCH_CONFIG_RUNNER
+#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
+#  define CATCH_IMPL
 #endif
 
-#ifdef CATCH_CONFIG_RUNNER
+#ifdef CATCH_IMPL
 #  ifndef CLARA_CONFIG_MAIN
 #    define CLARA_CONFIG_MAIN_NOT_DEFINED
 #    define CLARA_CONFIG_MAIN
@@ -135,6 +140,10 @@
 // Visual C++
 #ifdef _MSC_VER
 
+#if (_MSC_VER >= 1600)
+#define CATCH_CONFIG_CPP11_NULLPTR
+#endif
+
 #if (_MSC_VER >= 1310 ) // (VC++ 7.0+)
 //#define CATCH_CONFIG_SFINAE // Not confirmed
 #endif
@@ -176,8 +185,16 @@
 namespace Catch {
 
     class NonCopyable {
-        NonCopyable( NonCopyable const& );
-        void operator = ( NonCopyable const& );
+#ifdef CATCH_CPP11_OR_GREATER
+        NonCopyable( NonCopyable const& )              = delete;
+        NonCopyable( NonCopyable && )                  = delete;
+        NonCopyable& operator = ( NonCopyable const& ) = delete;
+        NonCopyable& operator = ( NonCopyable && )     = delete;
+#else
+        NonCopyable( NonCopyable const& info );
+        NonCopyable& operator = ( NonCopyable const& );
+#endif
+
     protected:
         NonCopyable() {}
         virtual ~NonCopyable();
@@ -215,6 +232,7 @@
     void toLowerInPlace( std::string& s );
     std::string toLower( std::string const& s );
     std::string trim( std::string const& str );
+    bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis );
 
     struct pluralise {
         pluralise( std::size_t count, std::string const& label );
@@ -237,6 +255,7 @@
 #  endif
         bool empty() const;
         bool operator == ( SourceLineInfo const& other ) const;
+        bool operator < ( SourceLineInfo const& other ) const;
 
         std::string file;
         std::size_t line;
@@ -467,7 +486,7 @@
     struct ITestCaseRegistry {
         virtual ~ITestCaseRegistry();
         virtual std::vector<TestCase> const& getAllTests() const = 0;
-        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases ) const = 0;
+        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const = 0;
 
     };
 }
@@ -603,7 +622,9 @@
         Exception = 0x100 | FailureBit,
 
         ThrewException = Exception | 1,
-        DidntThrowException = Exception | 2
+        DidntThrowException = Exception | 2,
+
+        FatalErrorCondition = 0x200 | FailureBit
 
     }; };
 
@@ -1034,9 +1055,49 @@
 
 #endif
 
+#ifdef CATCH_CPP11_OR_GREATER
+#include <tuple>
+#include <type_traits>
+#endif
+
 namespace Catch {
+
+// Why we're here.
+template<typename T>
+std::string toString( T const& value );
+
+// Built in overloads
+
+std::string toString( std::string const& value );
+std::string toString( std::wstring const& value );
+std::string toString( const char* const value );
+std::string toString( char* const value );
+std::string toString( const wchar_t* const value );
+std::string toString( wchar_t* const value );
+std::string toString( int value );
+std::string toString( unsigned long value );
+std::string toString( unsigned int value );
+std::string toString( const double value );
+std::string toString( const float value );
+std::string toString( bool value );
+std::string toString( char value );
+std::string toString( signed char value );
+std::string toString( unsigned char value );
+
+#ifdef CATCH_CONFIG_CPP11_NULLPTR
+std::string toString( std::nullptr_t );
+#endif
+
+#ifdef __OBJC__
+    std::string toString( NSString const * const& nsstring );
+    std::string toString( NSString * CATCH_ARC_STRONG const& nsstring );
+    std::string toString( NSObject* const& nsObject );
+#endif
+
 namespace Detail {
 
+    extern std::string unprintableString;
+
 // SFINAE is currently disabled by default for all compilers.
 // If the non SFINAE version of IsStreamInsertable is ambiguous for you
 // and your compiler supports SFINAE, try #defining CATCH_CONFIG_SFINAE
@@ -1077,10 +1138,38 @@
 
 #endif
 
+#if defined(CATCH_CPP11_OR_GREATER)
+    template<typename T,
+             bool IsEnum = std::is_enum<T>::value
+             >
+    struct EnumStringMaker
+    {
+        static std::string convert( T const& ) { return unprintableString; }
+    };
+
+    template<typename T>
+    struct EnumStringMaker<T,true>
+    {
+        static std::string convert( T const& v )
+        {
+            return ::Catch::toString(
+                static_cast<typename std::underlying_type<T>::type>(v)
+                );
+        }
+    };
+#endif
     template<bool C>
     struct StringMakerBase {
+#if defined(CATCH_CPP11_OR_GREATER)
         template<typename T>
-        static std::string convert( T const& ) { return "{?}"; }
+        static std::string convert( T const& v )
+        {
+            return EnumStringMaker<T>::convert( v );
+        }
+#else
+        template<typename T>
+        static std::string convert( T const& ) { return unprintableString; }
+#endif
     };
 
     template<>
@@ -1103,9 +1192,6 @@
 } // end namespace Detail
 
 template<typename T>
-std::string toString( T const& value );
-
-template<typename T>
 struct StringMaker :
     Detail::StringMakerBase<Detail::IsStreamInsertable<T>::value> {};
 
@@ -1135,12 +1221,59 @@
     std::string rangeToString( InputIterator first, InputIterator last );
 }
 
+//template<typename T, typename Allocator>
+//struct StringMaker<std::vector<T, Allocator> > {
+//    static std::string convert( std::vector<T,Allocator> const& v ) {
+//        return Detail::rangeToString( v.begin(), v.end() );
+//    }
+//};
+
 template<typename T, typename Allocator>
-struct StringMaker<std::vector<T, Allocator> > {
-    static std::string convert( std::vector<T,Allocator> const& v ) {
-        return Detail::rangeToString( v.begin(), v.end() );
+std::string toString( std::vector<T,Allocator> const& v ) {
+    return Detail::rangeToString( v.begin(), v.end() );
+}
+
+#ifdef CATCH_CPP11_OR_GREATER
+
+// toString for tuples
+namespace TupleDetail {
+  template<
+      typename Tuple,
+      std::size_t N = 0,
+      bool = (N < std::tuple_size<Tuple>::value)
+      >
+  struct ElementPrinter {
+      static void print( const Tuple& tuple, std::ostream& os )
+      {
+          os << ( N ? ", " : " " )
+             << Catch::toString(std::get<N>(tuple));
+          ElementPrinter<Tuple,N+1>::print(tuple,os);
+      }
+  };
+
+  template<
+      typename Tuple,
+      std::size_t N
+      >
+  struct ElementPrinter<Tuple,N,false> {
+      static void print( const Tuple&, std::ostream& ) {}
+  };
+
+}
+
+template<typename ...Types>
+struct StringMaker<std::tuple<Types...>> {
+
+    static std::string convert( const std::tuple<Types...>& tuple )
+    {
+        std::ostringstream os;
+        os << '{';
+        TupleDetail::ElementPrinter<std::tuple<Types...>>::print( tuple, os );
+        os << " }";
+        return os.str();
     }
 };
+#endif
 
 namespace Detail {
     template<typename T>
@@ -1161,44 +1294,15 @@
     return StringMaker<T>::convert( value );
 }
 
-// Built in overloads
-
-std::string toString( std::string const& value );
-std::string toString( std::wstring const& value );
-std::string toString( const char* const value );
-std::string toString( char* const value );
-std::string toString( const wchar_t* const value );
-std::string toString( wchar_t* const value );
-std::string toString( int value );
-std::string toString( unsigned long value );
-std::string toString( unsigned int value );
-std::string toString( const double value );
-std::string toString( const float value );
-std::string toString( bool value );
-std::string toString( char value );
-std::string toString( signed char value );
-std::string toString( unsigned char value );
-
-#ifdef CATCH_CONFIG_CPP11_NULLPTR
-std::string toString( std::nullptr_t );
-#endif
-
-#ifdef __OBJC__
-    std::string toString( NSString const * const& nsstring );
-    std::string toString( NSString * CATCH_ARC_STRONG const& nsstring );
-    std::string toString( NSObject* const& nsObject );
-#endif
-
     namespace Detail {
     template<typename InputIterator>
     std::string rangeToString( InputIterator first, InputIterator last ) {
         std::ostringstream oss;
         oss << "{ ";
         if( first != last ) {
-            oss << toString( *first );
-            for( ++first ; first != last ; ++first ) {
-                oss << ", " << toString( *first );
-            }
+            oss << Catch::toString( *first );
+            for( ++first ; first != last ; ++first )
+                oss << ", " << Catch::toString( *first );
         }
         oss << " }";
         return oss.str();
@@ -1395,6 +1499,8 @@
 
         virtual std::string getCurrentTestName() const = 0;
         virtual const AssertionResult* getLastResult() const = 0;
+
+        virtual void handleFatalErrorCondition( std::string const& message ) = 0;
     };
 
     IResultCapture& getResultCapture();
@@ -1575,7 +1681,7 @@
             std::string matcherAsString = ::Catch::Matchers::matcher.toString(); \
             __catchResult \
                 .setLhs( Catch::toString( arg ) ) \
-                .setRhs( matcherAsString == "{?}" ? #matcher : matcherAsString ) \
+                .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \
                 .setOp( "matches" ) \
                 .setResultType( ::Catch::Matchers::matcher.match( arg ) ); \
             __catchResult.captureExpression(); \
@@ -1636,6 +1742,9 @@
         bool allPassed() const {
             return failed == 0 && failedButOk == 0;
         }
+        bool allOk() const {
+            return failed == 0;
+        }
 
         std::size_t passed;
         std::size_t failed;
@@ -1688,7 +1797,7 @@
     public:
         Timer() : m_ticks( 0 ) {}
         void start();
-        unsigned int getElapsedNanoseconds() const;
+        unsigned int getElapsedMicroseconds() const;
         unsigned int getElapsedMilliseconds() const;
         double getElapsedSeconds() const;
 
@@ -1702,7 +1811,7 @@
 
 namespace Catch {
 
-    class Section {
+    class Section : NonCopyable {
     public:
         Section( SectionInfo const& info );
         ~Section();
@@ -1711,15 +1820,6 @@
         operator bool() const;
 
     private:
-#ifdef CATCH_CPP11_OR_GREATER
-        Section( Section const& )              = delete;
-        Section( Section && )                  = delete;
-        Section& operator = ( Section const& ) = delete;
-        Section& operator = ( Section && )     = delete;
-#else
-        Section( Section const& info );
-        Section& operator = ( Section const& );
-#endif
         SectionInfo m_info;
 
         std::string m_name;
@@ -2694,7 +2794,7 @@
 
 #endif
 
-#ifdef CATCH_CONFIG_RUNNER
+#ifdef CATCH_IMPL
 // #included from: internal/catch_impl.hpp
 #define TWOBLUECUBES_CATCH_IMPL_HPP_INCLUDED
 
@@ -2706,7 +2806,7 @@
 #pragma clang diagnostic ignored "-Wweak-vtables"
 #endif
 
-// #included from: catch_runner.hpp
+// #included from: ../catch_runner.hpp
 #define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED
 
 // #included from: internal/catch_commandline.hpp
@@ -2962,6 +3062,11 @@
         Always,
         Never
     }; };
+    struct RunTests { enum InWhatOrder {
+        InDeclarationOrder,
+        InLexicographicalOrder,
+        InRandomOrder
+    }; };
 
     class TestSpec;
 
@@ -2979,6 +3084,9 @@
         virtual bool showInvisibles() const = 0;
         virtual ShowDurations::OrNot showDurations() const = 0;
         virtual TestSpec const& testSpec() const = 0;
+        virtual RunTests::InWhatOrder runOrder() const = 0;
+        virtual unsigned int rngSeed() const = 0;
+        virtual bool forceColour() const = 0;
     };
 }
 
@@ -3004,12 +3112,16 @@
     private:
         bool isOwned;
     };
+
+    std::ostream& cout();
+    std::ostream& cerr();
 }
 
 #include <memory>
 #include <vector>
 #include <string>
 #include <iostream>
+#include <ctime>
 
 #ifndef CATCH_CONFIG_CONSOLE_WIDTH
 #define CATCH_CONFIG_CONSOLE_WIDTH 80
@@ -3029,10 +3141,13 @@
             noThrow( false ),
             showHelp( false ),
             showInvisibles( false ),
+            forceColour( false ),
             abortAfter( -1 ),
+            rngSeed( 0 ),
             verbosity( Verbosity::Normal ),
             warnings( WarnAbout::Nothing ),
-            showDurations( ShowDurations::DefaultForReporter )
+            showDurations( ShowDurations::DefaultForReporter ),
+            runOrder( RunTests::InDeclarationOrder )
         {}
 
         bool listTests;
@@ -3045,12 +3160,15 @@
         bool noThrow;
         bool showHelp;
         bool showInvisibles;
+        bool forceColour;
 
         int abortAfter;
+        unsigned int rngSeed;
 
         Verbosity::Level verbosity;
         WarnAbout::What warnings;
         ShowDurations::OrNot showDurations;
+        RunTests::InWhatOrder runOrder;
 
         std::string reporterName;
         std::string outputFilename;
@@ -3068,12 +3186,12 @@
     public:
 
         Config()
-        :   m_os( std::cout.rdbuf() )
+        :   m_os( Catch::cout().rdbuf() )
         {}
 
         Config( ConfigData const& data )
         :   m_data( data ),
-            m_os( std::cout.rdbuf() )
+            m_os( Catch::cout().rdbuf() )
         {
             if( !data.testsOrTags.empty() ) {
                 TestSpecParser parser( ITagAliasRegistry::get() );
@@ -3084,7 +3202,7 @@
         }
 
         virtual ~Config() {
-            m_os.rdbuf( std::cout.rdbuf() );
+            m_os.rdbuf( Catch::cout().rdbuf() );
             m_stream.release();
         }
 
@@ -3106,7 +3224,7 @@
         bool shouldDebugBreak() const { return m_data.shouldDebugBreak; }
 
         void setStreamBuf( std::streambuf* buf ) {
-            m_os.rdbuf( buf ? buf : std::cout.rdbuf() );
+            m_os.rdbuf( buf ? buf : Catch::cout().rdbuf() );
         }
 
         void useStream( std::string const& streamName ) {
@@ -3132,6 +3250,9 @@
         virtual bool includeSuccessfulResults() const   { return m_data.showSuccessfulTests; }
         virtual bool warnAboutMissingAssertions() const { return m_data.warnings & WarnAbout::NoAssertions; }
         virtual ShowDurations::OrNot showDurations() const { return m_data.showDurations; }
+        virtual RunTests::InWhatOrder runOrder() const  { return m_data.runOrder; }
+        virtual unsigned int rngSeed() const    { return m_data.rngSeed; }
+        virtual bool forceColour() const { return m_data.forceColour; }
 
     private:
         ConfigData m_data;
@@ -3760,7 +3881,7 @@
             m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens )
         {
             if( other.m_floatingArg.get() )
-                m_floatingArg = ArgAutoPtr( new Arg( *other.m_floatingArg ) );
+                m_floatingArg.reset( new Arg( *other.m_floatingArg ) );
         }
 
         CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) {
@@ -3788,7 +3909,7 @@
         ArgBuilder operator[]( UnpositionalTag ) {
             if( m_floatingArg.get() )
                 throw std::logic_error( "Only one unpositional argument can be added" );
-            m_floatingArg = ArgAutoPtr( new Arg() );
+            m_floatingArg.reset( new Arg() );
             ArgBuilder builder( m_floatingArg.get() );
             return builder;
         }
@@ -3930,7 +4051,7 @@
                 if( it == itEnd ) {
                     if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens )
                         unusedTokens.push_back( token );
-                    else if( m_throwOnUnrecognisedTokens )
+                    else if( errors.empty() && m_throwOnUnrecognisedTokens )
                         errors.push_back( "unrecognised option: " + token.data );
                 }
             }
@@ -4028,7 +4149,28 @@
             config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions );
         else
             throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" );
-
+    }
+    inline void setOrder( ConfigData& config, std::string const& order ) {
+        if( startsWith( "declared", order ) )
+            config.runOrder = RunTests::InDeclarationOrder;
+        else if( startsWith( "lexical", order ) )
+            config.runOrder = RunTests::InLexicographicalOrder;
+        else if( startsWith( "random", order ) )
+            config.runOrder = RunTests::InRandomOrder;
+        else
+            throw std::runtime_error( "Unrecognised ordering: '" + order + "'" );
+    }
+    inline void setRngSeed( ConfigData& config, std::string const& seed ) {
+        if( seed == "time" ) {
+            config.rngSeed = static_cast<unsigned int>( std::time(0) );
+        }
+        else {
+            std::stringstream ss;
+            ss << seed;
+            ss >> config.rngSeed;
+            if( ss.fail() )
+                throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" );
+        }
     }
     inline void setVerbosity( ConfigData& config, int level ) {
         // !TBD: accept strings?
@@ -4140,6 +4282,18 @@
             .describe( "list all reporters" )
             .bind( &ConfigData::listReporters );
 
+        cli["--order"]
+            .describe( "test case order (defaults to decl)" )
+            .bind( &setOrder, "decl|lex|rand" );
+
+        cli["--rng-seed"]
+            .describe( "set a specific seed for random numbers" )
+            .bind( &setRngSeed, "'time'|number" );
+
+        cli["--force-colour"]
+            .describe( "force colourised output" )
+            .bind( &ConfigData::forceColour );
+
         return cli;
     }
 
@@ -4313,10 +4467,6 @@
 
 namespace Catch {
 
-    namespace Detail {
-        struct IColourImpl;
-    }
-
     struct Colour {
         enum Code {
             None = 0,
@@ -4362,7 +4512,6 @@
         static void use( Code _colourCode );
 
     private:
-        static Detail::IColourImpl* impl();
         bool m_moved;
     };
 
@@ -4592,11 +4741,14 @@
 
         virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0;
 
+        // The return value indicates if the messages buffer should be cleared:
         virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0;
         virtual void sectionEnded( SectionStats const& sectionStats ) = 0;
         virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0;
         virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0;
         virtual void testRunEnded( TestRunStats const& testRunStats ) = 0;
+
+        virtual void skipTest( TestCaseInfo const& testInfo ) = 0;
     };
 
     struct IReporterFactory {
@@ -4624,9 +4776,9 @@
 
         TestSpec testSpec = config.testSpec();
         if( config.testSpec().hasFilters() )
-            std::cout << "Matching test cases:\n";
+            Catch::cout() << "Matching test cases:\n";
         else {
-            std::cout << "All available test cases:\n";
+            Catch::cout() << "All available test cases:\n";
             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec();
         }
 
@@ -4647,15 +4799,15 @@
                 : Colour::None;
             Colour colourGuard( colour );
 
-            std::cout << Text( testCaseInfo.name, nameAttr ) << std::endl;
+            Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl;
             if( !testCaseInfo.tags.empty() )
-                std::cout << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
+                Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl;
         }
 
         if( !config.testSpec().hasFilters() )
-            std::cout << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
+            Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl;
         else
-            std::cout << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl;
+            Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl;
         return matchedTests;
     }
 
@@ -4671,7 +4823,7 @@
                 ++it ) {
             matchedTests++;
             TestCaseInfo const& testCaseInfo = it->getTestCaseInfo();
-            std::cout << testCaseInfo.name << std::endl;
+            Catch::cout() << testCaseInfo.name << std::endl;
         }
         return matchedTests;
     }
@@ -4697,9 +4849,9 @@
     inline std::size_t listTags( Config const& config ) {
         TestSpec testSpec = config.testSpec();
         if( config.testSpec().hasFilters() )
-            std::cout << "Tags for matching test cases:\n";
+            Catch::cout() << "Tags for matching test cases:\n";
         else {
-            std::cout << "All available tags:\n";
+            Catch::cout() << "All available tags:\n";
             testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec();
         }
 
@@ -4733,14 +4885,14 @@
                                                     .setInitialIndent( 0 )
                                                     .setIndent( oss.str().size() )
                                                     .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) );
-            std::cout << oss.str() << wrapper << "\n";
+            Catch::cout() << oss.str() << wrapper << "\n";
         }
-        std::cout << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl;
+        Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl;
         return tagCounts.size();
     }
 
     inline std::size_t listReporters( Config const& /*config*/ ) {
-        std::cout << "Available reports:\n";
+        Catch::cout() << "Available reporters:\n";
         IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
         IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it;
         std::size_t maxNameLen = 0;
@@ -4752,13 +4904,13 @@
                                                         .setInitialIndent( 0 )
                                                         .setIndent( 7+maxNameLen )
                                                         .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) );
-            std::cout << "  "
+            Catch::cout() << "  "
                     << it->first
                     << ":"
                     << std::string( maxNameLen - it->first.size() + 2, ' ' )
                     << wrapper << "\n";
         }
-        std::cout << std::endl;
+        Catch::cout() << std::endl;
         return factories.size();
     }
 
@@ -4915,6 +5067,81 @@
 
 } // namespace Catch
 
+// #included from: catch_fatal_condition.hpp
+#define TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED
+
+namespace Catch {
+
+    // Report the error condition then exit the process
+    inline void fatal( std::string const& message, int exitCode ) {
+        IContext& context = Catch::getCurrentContext();
+        IResultCapture* resultCapture = context.getResultCapture();
+        resultCapture->handleFatalErrorCondition( message );
+
+		if( Catch::alwaysTrue() ) // avoids "no return" warnings
+            exit( exitCode );
+    }
+
+} // namespace Catch
+
+#if defined ( CATCH_PLATFORM_WINDOWS ) /////////////////////////////////////////
+
+namespace Catch {
+
+    struct FatalConditionHandler {
+		void reset() {}
+	};
+
+} // namespace Catch
+
+#else // Not Windows - assumed to be POSIX compatible //////////////////////////
+
+#include <signal.h>
+
+namespace Catch {
+
+    struct SignalDefs { int id; const char* name; };
+    extern SignalDefs signalDefs[];
+    SignalDefs signalDefs[] = {
+            { SIGINT,  "SIGINT - Terminal interrupt signal" },
+            { SIGILL,  "SIGILL - Illegal instruction signal" },
+            { SIGFPE,  "SIGFPE - Floating point error signal" },
+            { SIGSEGV, "SIGSEGV - Segmentation violation signal" },
+            { SIGTERM, "SIGTERM - Termination request signal" },
+            { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
+        };
+
+    struct FatalConditionHandler {
+
+        static void handleSignal( int sig ) {
+            for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                if( sig == signalDefs[i].id )
+                    fatal( signalDefs[i].name, -sig );
+            fatal( "<unknown signal>", -sig );
+        }
+
+        FatalConditionHandler() : m_isSet( true ) {
+            for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                signal( signalDefs[i].id, handleSignal );
+        }
+        ~FatalConditionHandler() {
+            reset();
+        }
+        void reset() {
+            if( m_isSet ) {
+                for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i )
+                    signal( signalDefs[i].id, SIG_DFL );
+                m_isSet = false;
+            }
+        }
+
+        bool m_isSet;
+    };
+
+} // namespace Catch
+
+#endif // not Windows
+
 #include <set>
 #include <string>
 
@@ -5102,6 +5329,37 @@
             return &m_lastResult;
         }
 
+        virtual void handleFatalErrorCondition( std::string const& message ) {
+            ResultBuilder resultBuilder = makeUnexpectedResultBuilder();
+            resultBuilder.setResultType( ResultWas::FatalErrorCondition );
+            resultBuilder << message;
+            resultBuilder.captureExpression();
+
+            handleUnfinishedSections();
+
+            // Recreate section for test case (as we will lose the one that was in scope)
+            TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
+            SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description );
+
+            Counts assertions;
+            assertions.failed = 1;
+            SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false );
+            m_reporter->sectionEnded( testCaseSectionStats );
+
+            TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo();
+
+            Totals deltaTotals;
+            deltaTotals.testCases.failed = 1;
+            m_reporter->testCaseEnded( TestCaseStats(   testInfo,
+                                                        deltaTotals,
+                                                        "",
+                                                        "",
+                                                        false ) );
+            m_totals.testCases.failed++;
+            testGroupEnded( "", m_totals, 1, 1 );
+            m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) );
+        }
+
     public:
         // !TBD We need to do this another way!
         bool aborting() const {
@@ -5123,12 +5381,12 @@
                 Timer timer;
                 timer.start();
                 if( m_reporter->getPreferences().shouldRedirectStdOut ) {
-                    StreamRedirect coutRedir( std::cout, redirectedCout );
-                    StreamRedirect cerrRedir( std::cerr, redirectedCerr );
-                    m_activeTestCase->invoke();
+                    StreamRedirect coutRedir( Catch::cout(), redirectedCout );
+                    StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr );
+                    invokeActiveTestCase();
                 }
                 else {
-                    m_activeTestCase->invoke();
+                    invokeActiveTestCase();
                 }
                 duration = timer.getElapsedSeconds();
             }
@@ -5136,20 +5394,9 @@
                 // This just means the test was aborted due to failure
             }
             catch(...) {
-                ResultBuilder exResult( m_lastAssertionInfo.macroName.c_str(),
-                                        m_lastAssertionInfo.lineInfo,
-                                        m_lastAssertionInfo.capturedExpression.c_str(),
-                                        m_lastAssertionInfo.resultDisposition );
-                exResult.useActiveException();
+                makeUnexpectedResultBuilder().useActiveException();
             }
-            // If sections ended prematurely due to an exception we stored their
-            // infos here so we can tear them down outside the unwind process.
-            for( std::vector<UnfinishedSections>::const_reverse_iterator it = m_unfinishedSections.rbegin(),
-                        itEnd = m_unfinishedSections.rend();
-                    it != itEnd;
-                    ++it )
-                sectionEnded( it->info, it->prevAssertions, it->durationInSeconds );
-            m_unfinishedSections.clear();
+            handleUnfinishedSections();
             m_messages.clear();
 
             Counts assertions = m_totals.assertions - prevAssertions;
@@ -5165,7 +5412,32 @@
             m_reporter->sectionEnded( testCaseSectionStats );
         }
 
+        void invokeActiveTestCase() {
+            FatalConditionHandler fatalConditionHandler; // Handle signals
+            m_activeTestCase->invoke();
+            fatalConditionHandler.reset();
+        }
+
     private:
+
+        ResultBuilder makeUnexpectedResultBuilder() const {
+            return ResultBuilder(   m_lastAssertionInfo.macroName.c_str(),
+                                    m_lastAssertionInfo.lineInfo,
+                                    m_lastAssertionInfo.capturedExpression.c_str(),
+                                    m_lastAssertionInfo.resultDisposition );
+        }
+
+        void handleUnfinishedSections() {
+            // If sections ended prematurely due to an exception we stored their
+            // infos here so we can tear them down outside the unwind process.
+            for( std::vector<UnfinishedSections>::const_reverse_iterator it = m_unfinishedSections.rbegin(),
+                        itEnd = m_unfinishedSections.rend();
+                    it != itEnd;
+                    ++it )
+                sectionEnded( it->info, it->prevAssertions, it->durationInSeconds );
+            m_unfinishedSections.clear();
+        }
+
         struct UnfinishedSections {
             UnfinishedSections( SectionInfo const& _info, Counts const& _prevAssertions, double _durationInSeconds )
             : info( _info ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds )
@@ -5253,7 +5525,7 @@
 
             Totals totals;
 
-            context.testGroupStarting( "", 1, 1 ); // deprecated?
+            context.testGroupStarting( "all tests", 1, 1 ); // deprecated?
 
             TestSpec testSpec = m_config->testSpec();
             if( !testSpec.hasFilters() )
@@ -5276,7 +5548,15 @@
                     m_testsAlreadyRun.insert( *it );
                 }
             }
-            context.testGroupEnded( "", totals, 1, 1 );
+            std::vector<TestCase> skippedTestCases;
+            getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, *m_config, skippedTestCases, true );
+
+            for( std::vector<TestCase>::const_iterator it = skippedTestCases.begin(), itEnd = skippedTestCases.end();
+                    it != itEnd;
+                    ++it )
+                m_reporter->skipTest( *it );
+
+            context.testGroupEnded( "all tests", totals, 1, 1 );
             return totals;
         }
 
@@ -5313,7 +5593,7 @@
         std::set<TestCase> m_testsAlreadyRun;
     };
 
-    class Session {
+    class Session : NonCopyable {
         static bool alreadyInstantiated;
 
     public:
@@ -5324,7 +5604,7 @@
         : m_cli( makeCommandLineParser() ) {
             if( alreadyInstantiated ) {
                 std::string msg = "Only one instance of Catch::Session can ever be used";
-                std::cerr << msg << std::endl;
+                Catch::cerr() << msg << std::endl;
                 throw std::logic_error( msg );
             }
             alreadyInstantiated = true;
@@ -5334,15 +5614,15 @@
         }
 
         void showHelp( std::string const& processName ) {
-            std::cout << "\nCatch v"    << libraryVersion.majorVersion << "."
+            Catch::cout() << "\nCatch v"    << libraryVersion.majorVersion << "."
                                         << libraryVersion.minorVersion << " build "
                                         << libraryVersion.buildNumber;
             if( libraryVersion.branchName != std::string( "master" ) )
-                std::cout << " (" << libraryVersion.branchName << " branch)";
-            std::cout << "\n";
+                Catch::cout() << " (" << libraryVersion.branchName << " branch)";
+            Catch::cout() << "\n";
 
-            m_cli.usage( std::cout, processName );
-            std::cout << "For more detail usage please see the project docs\n" << std::endl;
+            m_cli.usage( Catch::cout(), processName );
+            Catch::cout() << "For more detail usage please see the project docs\n" << std::endl;
         }
 
         int applyCommandLine( int argc, char* const argv[], OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) {
@@ -5356,11 +5636,11 @@
             catch( std::exception& ex ) {
                 {
                     Colour colourGuard( Colour::Red );
-                    std::cerr   << "\nError(s) in input:\n"
+                    Catch::cerr()   << "\nError(s) in input:\n"
                                 << Text( ex.what(), TextAttributes().setIndent(2) )
                                 << "\n\n";
                 }
-                m_cli.usage( std::cout, m_configData.processName );
+                m_cli.usage( Catch::cout(), m_configData.processName );
                 return (std::numeric_limits<int>::max)();
             }
             return 0;
@@ -5386,6 +5666,9 @@
             try
             {
                 config(); // Force config to be constructed
+
+                std::srand( m_configData.rngSeed );
+
                 Runner runner( m_config );
 
                 // Handle list request
@@ -5395,7 +5678,7 @@
                 return static_cast<int>( runner.runTests().assertions.failed );
             }
             catch( std::exception& ex ) {
-                std::cerr << ex.what() << std::endl;
+                Catch::cerr() << ex.what() << std::endl;
                 return (std::numeric_limits<int>::max)();
             }
         }
@@ -5436,10 +5719,18 @@
 #include <set>
 #include <sstream>
 #include <iostream>
+#include <algorithm>
 
 namespace Catch {
 
     class TestRegistry : public ITestCaseRegistry {
+        struct LexSort {
+            bool operator() (TestCase i,TestCase j) const { return (i<j);}
+        };
+        struct RandomNumberGenerator {
+            int operator()( int n ) const { return std::rand() % n; }
+        };
+
     public:
         TestRegistry() : m_unnamedCount( 0 ) {}
         virtual ~TestRegistry();
@@ -5462,7 +5753,7 @@
                 TestCase const& prev = *m_functions.find( testCase );
                 {
                     Colour colourGuard( Colour::Red );
-                    std::cerr   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n"
+                    Catch::cerr()   << "error: TEST_CASE( \"" << name << "\" ) already defined.\n"
                                 << "\tFirst seen at " << prev.getTestCaseInfo().lineInfo << "\n"
                                 << "\tRedefined at " << testCase.getTestCaseInfo().lineInfo << std::endl;
                 }
@@ -5478,18 +5769,38 @@
             return m_nonHiddenFunctions;
         }
 
-        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases ) const {
+        virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const {
+
             for( std::vector<TestCase>::const_iterator  it = m_functionsInOrder.begin(),
                                                         itEnd = m_functionsInOrder.end();
                     it != itEnd;
                     ++it ) {
-                if( testSpec.matches( *it ) && ( config.allowThrows() || !it->throws() ) )
+                bool includeTest = testSpec.matches( *it ) && ( config.allowThrows() || !it->throws() );
+                if( includeTest != negated )
                     matchingTestCases.push_back( *it );
             }
+            sortTests( config, matchingTestCases );
         }
 
     private:
 
+        static void sortTests( IConfig const& config, std::vector<TestCase>& matchingTestCases ) {
+
+            switch( config.runOrder() ) {
+                case RunTests::InLexicographicalOrder:
+                    std::sort( matchingTestCases.begin(), matchingTestCases.end(), LexSort() );
+                    break;
+                case RunTests::InRandomOrder:
+                {
+                    RandomNumberGenerator rng;
+                    std::random_shuffle( matchingTestCases.begin(), matchingTestCases.end(), rng );
+                }
+                    break;
+                case RunTests::InDeclarationOrder:
+                    // already in declaration order
+                    break;
+            }
+        }
         std::set<TestCase> m_functions;
         std::vector<TestCase> m_functionsInOrder;
         std::vector<TestCase> m_nonHiddenFunctions;
@@ -5613,7 +5924,7 @@
                     throw;
                 }
                 @catch (NSException *exception) {
-                    return toString( [exception description] );
+                    return Catch::toString( [exception description] );
                 }
 #else
                 throw;
@@ -5760,6 +6071,7 @@
 
 #include <stdexcept>
 #include <cstdio>
+#include <iostream>
 
 namespace Catch {
 
@@ -5823,6 +6135,15 @@
             isOwned = false;
         }
     }
+
+#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement this functions
+    std::ostream& cout() {
+        return std::cout;
+    }
+    std::ostream& cerr() {
+        return std::cerr;
+    }
+#endif
 }
 
 namespace Catch {
@@ -5872,7 +6193,7 @@
             std::string testName = getResultCapture()->getCurrentTestName();
 
             std::map<std::string, IGeneratorsForTest*>::const_iterator it =
-            m_generatorsByTestName.find( testName );
+                m_generatorsByTestName.find( testName );
             return it != m_generatorsByTestName.end()
                 ? it->second
                 : NULL;
@@ -5908,8 +6229,8 @@
     }
 
     Stream createStream( std::string const& streamName ) {
-        if( streamName == "stdout" ) return Stream( std::cout.rdbuf(), false );
-        if( streamName == "stderr" ) return Stream( std::cerr.rdbuf(), false );
+        if( streamName == "stdout" ) return Stream( Catch::cout().rdbuf(), false );
+        if( streamName == "stderr" ) return Stream( Catch::cerr().rdbuf(), false );
         if( streamName == "debug" ) return Stream( new StreamBufImpl<OutputDebugWriter>, true );
 
         throw std::domain_error( "Unknown stream: " + streamName );
@@ -5924,14 +6245,35 @@
 // #included from: catch_console_colour_impl.hpp
 #define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_IMPL_HPP_INCLUDED
 
-namespace Catch { namespace Detail {
-    struct IColourImpl {
-        virtual ~IColourImpl() {}
-        virtual void use( Colour::Code _colourCode ) = 0;
-    };
-}}
+namespace Catch {
+    namespace {
 
-#if defined ( CATCH_PLATFORM_WINDOWS ) /////////////////////////////////////////
+        struct IColourImpl {
+            virtual ~IColourImpl() {}
+            virtual void use( Colour::Code _colourCode ) = 0;
+        };
+
+        struct NoColourImpl : IColourImpl {
+            void use( Colour::Code ) {}
+
+            static IColourImpl* instance() {
+                static NoColourImpl s_instance;
+                return &s_instance;
+            }
+        };
+
+    } // anon namespace
+} // namespace Catch
+
+#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI )
+#   ifdef CATCH_PLATFORM_WINDOWS
+#       define CATCH_CONFIG_COLOUR_WINDOWS
+#   else
+#       define CATCH_CONFIG_COLOUR_ANSI
+#   endif
+#endif
+
+#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) /////////////////////////////////////////
 
 #ifndef NOMINMAX
 #define NOMINMAX
@@ -5946,7 +6288,7 @@
 namespace Catch {
 namespace {
 
-    class Win32ColourImpl : public Detail::IColourImpl {
+    class Win32ColourImpl : public IColourImpl {
     public:
         Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) )
         {
@@ -5983,11 +6325,7 @@
         WORD originalAttributes;
     };
 
-    inline bool shouldUseColourForPlatform() {
-        return true;
-    }
-
-    static Detail::IColourImpl* platformColourInstance() {
+    IColourImpl* platformColourInstance() {
         static Win32ColourImpl s_instance;
         return &s_instance;
     }
@@ -5995,7 +6333,7 @@
 } // end anon namespace
 } // end namespace Catch
 
-#else // Not Windows - assumed to be POSIX compatible //////////////////////////
+#elif defined( CATCH_CONFIG_COLOUR_ANSI ) //////////////////////////////////////
 
 #include <unistd.h>
 
@@ -6006,7 +6344,7 @@
     // Thanks to Adam Strzelecki for original contribution
     // (http://github.com/nanoant)
     // https://github.com/philsquared/Catch/pull/131
-    class PosixColourImpl : public Detail::IColourImpl {
+    class PosixColourImpl : public IColourImpl {
     public:
         virtual void use( Colour::Code _colourCode ) {
             switch( _colourCode ) {
@@ -6027,53 +6365,48 @@
                 case Colour::Bright: throw std::logic_error( "not a colour" );
             }
         }
+        static IColourImpl* instance() {
+            static PosixColourImpl s_instance;
+            return &s_instance;
+        }
+
     private:
         void setColour( const char* _escapeCode ) {
-            std::cout << '\033' << _escapeCode;
+            Catch::cout() << '\033' << _escapeCode;
         }
     };
 
-    inline bool shouldUseColourForPlatform() {
-        return isatty(STDOUT_FILENO);
-    }
-
-    static Detail::IColourImpl* platformColourInstance() {
-        static PosixColourImpl s_instance;
-        return &s_instance;
+    IColourImpl* platformColourInstance() {
+        Ptr<IConfig const> config = getCurrentContext().getConfig();
+        return (config && config->forceColour()) || isatty(STDOUT_FILENO)
+            ? PosixColourImpl::instance()
+            : NoColourImpl::instance();
     }
 
 } // end anon namespace
 } // end namespace Catch
 
-#endif // not Windows
+#else  // not Windows or ANSI ///////////////////////////////////////////////
 
 namespace Catch {
 
-    namespace {
-        struct NoColourImpl : Detail::IColourImpl {
-            void use( Colour::Code ) {}
+    static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); }
 
-            static IColourImpl* instance() {
-                static NoColourImpl s_instance;
-                return &s_instance;
-            }
-        };
-        static bool shouldUseColour() {
-            return shouldUseColourForPlatform() && !isDebuggerActive();
-        }
-    }
+} // end namespace Catch
+
+#endif // Windows/ ANSI/ None
+
+namespace Catch {
 
     Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); }
     Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; }
     Colour::~Colour(){ if( !m_moved ) use( None ); }
-    void Colour::use( Code _colourCode ) {
-        impl()->use( _colourCode );
-    }
 
-    Detail::IColourImpl* Colour::impl() {
-        return shouldUseColour()
-            ? platformColourInstance()
-            : NoColourImpl::instance();
+    void Colour::use( Code _colourCode ) {
+        static IColourImpl* impl = isDebuggerActive()
+            ? NoColourImpl::instance()
+            : platformColourInstance();
+        impl->use( _colourCode );
     }
 
 } // end namespace Catch
@@ -6238,7 +6571,7 @@
 namespace Catch {
 
     inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) {
-        if( tag == "." ||
+        if( startsWith( tag, "." ) ||
             tag == "hide" ||
             tag == "!hide" )
             return TestCaseInfo::IsHidden;
@@ -6252,19 +6585,19 @@
             return TestCaseInfo::None;
     }
     inline bool isReservedTag( std::string const& tag ) {
-        return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] );
+        return TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] );
     }
     inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) {
         if( isReservedTag( tag ) ) {
             {
                 Colour colourGuard( Colour::Red );
-                std::cerr
+                Catch::cerr()
                     << "Tag name [" << tag << "] not allowed.\n"
                     << "Tag names starting with non alpha-numeric characters are reserved\n";
             }
             {
                 Colour colourGuard( Colour::FileName );
-                std::cerr << _lineInfo << std::endl;
+                Catch::cerr() << _lineInfo << std::endl;
             }
             exit(1);
         }
@@ -6292,14 +6625,15 @@
             }
             else {
                 if( c == ']' ) {
-                    enforceNotReservedTag( tag, _lineInfo );
-
-                    inTag = false;
-                    if( tag == "hide" || tag == "." )
+                    TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag );
+                    if( prop == TestCaseInfo::IsHidden )
                         isHidden = true;
-                    else
-                        tags.insert( tag );
+                    else if( prop == TestCaseInfo::None )
+                        enforceNotReservedTag( tag, _lineInfo );
+
+                    tags.insert( tag );
                     tag.clear();
+                    inTag = false;
                 }
                 else
                     tag += c;
@@ -6417,7 +6751,7 @@
 namespace Catch {
 
     // These numbers are maintained by a script
-    Version libraryVersion( 1, 0, 53, "master" );
+    Version libraryVersion( 1, 1, 14, "develop" );
 }
 
 // #included from: catch_message.hpp
@@ -6501,6 +6835,7 @@
         virtual void testCaseEnded( TestCaseStats const& testCaseStats );
         virtual void testGroupEnded( TestGroupStats const& testGroupStats );
         virtual void testRunEnded( TestRunStats const& testRunStats );
+        virtual void skipTest( TestCaseInfo const& );
 
     private:
         Ptr<IReporter> m_legacyReporter;
@@ -6574,6 +6909,8 @@
     void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) {
         m_legacyReporter->EndTesting( testRunStats.totals );
     }
+    void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) {
+    }
 }
 
 // #included from: catch_timer.hpp
@@ -6615,14 +6952,14 @@
     void Timer::start() {
         m_ticks = getCurrentTicks();
     }
-    unsigned int Timer::getElapsedNanoseconds() const {
+    unsigned int Timer::getElapsedMicroseconds() const {
         return static_cast<unsigned int>(getCurrentTicks() - m_ticks);
     }
     unsigned int Timer::getElapsedMilliseconds() const {
-        return static_cast<unsigned int>((getCurrentTicks() - m_ticks)/1000);
+        return static_cast<unsigned int>(getElapsedMicroseconds()/1000);
     }
     double Timer::getElapsedSeconds() const {
-        return (getCurrentTicks() - m_ticks)/1000000.0;
+        return getElapsedMicroseconds()/1000000.0;
     }
 
 } // namespace Catch
@@ -6660,6 +6997,20 @@
         return start != std::string::npos ? str.substr( start, 1+end-start ) : "";
     }
 
+    bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) {
+        bool replaced = false;
+        std::size_t i = str.find( replaceThis );
+        while( i != std::string::npos ) {
+            replaced = true;
+            str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() );
+            if( i < str.size()-withThis.size() )
+                i = str.find( replaceThis, i+withThis.size() );
+            else
+                i = std::string::npos;
+        }
+        return replaced;
+    }
+
     pluralise::pluralise( std::size_t count, std::string const& label )
     :   m_count( count ),
         m_label( label )
@@ -6687,6 +7038,9 @@
     bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const {
         return line == other.line && file == other.file;
     }
+    bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const {
+        return line < other.line || ( line == other.line  && file < other.file );
+    }
 
     std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) {
 #ifndef __GNUG__
@@ -6781,7 +7135,7 @@
 
             size = sizeof(info);
             if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0) != 0 ) {
-                std::cerr << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
+                Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl;
                 return false;
             }
 
@@ -6822,7 +7176,7 @@
     namespace Catch {
         void writeToDebugConsole( std::string const& text ) {
             // !TBD: Need a version for Mac/ XCode and other IDEs
-            std::cout << text;
+            Catch::cout() << text;
         }
     }
 #endif // Platform
@@ -6834,6 +7188,8 @@
 
 namespace Detail {
 
+    std::string unprintableString = "{?}";
+
     namespace {
         struct Endianness {
             enum Arch { Big, Little };
@@ -6892,7 +7248,7 @@
     s.reserve( value.size() );
     for(size_t i = 0; i < value.size(); ++i )
         s += value[i] <= 0xff ? static_cast<char>( value[i] ) : '?';
-    return toString( s );
+    return Catch::toString( s );
 }
 
 std::string toString( const char* const value ) {
@@ -6915,7 +7271,10 @@
 
 std::string toString( int value ) {
     std::ostringstream oss;
-    oss << value;
+    if( value > 8192 )
+        oss << "0x" << std::hex << value;
+    else
+        oss << value;
     return oss.str();
 }
 
@@ -6929,7 +7288,7 @@
 }
 
 std::string toString( unsigned int value ) {
-    return toString( static_cast<unsigned long>( value ) );
+    return Catch::toString( static_cast<unsigned long>( value ) );
 }
 
 template<typename T>
@@ -7195,7 +7554,7 @@
         }
         catch( std::exception& ex ) {
             Colour colourGuard( Colour::Red );
-            std::cerr << ex.what() << std::endl;
+            Catch::cerr() << ex.what() << std::endl;
             exit(1);
         }
     }
@@ -7208,6 +7567,8 @@
 // #included from: catch_reporter_bases.hpp
 #define TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED
 
+#include <cstring>
+
 namespace Catch {
 
     struct StreamingReporterBase : SharedImpl<IStreamingReporter> {
@@ -7240,7 +7601,6 @@
         }
         virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) {
             currentTestCaseInfo.reset();
-            assert( m_sectionStack.empty() );
         }
         virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) {
             currentGroupInfo.reset();
@@ -7251,6 +7611,11 @@
             currentTestRunInfo.reset();
         }
 
+        virtual void skipTest( TestCaseInfo const& ) {
+            // Don't do anything with this by default.
+            // It can optionally be overridden in the derived class.
+        }
+
         Ptr<IConfig> m_config;
         std::ostream& stream;
 
@@ -7380,6 +7745,8 @@
         }
         virtual void testRunEndedCumulative() = 0;
 
+        virtual void skipTest( TestCaseInfo const& ) {}
+
         Ptr<IConfig> m_config;
         std::ostream& stream;
         std::vector<AssertionStats> m_assertions;
@@ -7395,6 +7762,16 @@
 
     };
 
+    template<char C>
+    char const* getLineOfChars() {
+        static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
+        if( !*line ) {
+            memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
+            line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
+        }
+        return line;
+    }
+
 } // end namespace Catch
 
 // #included from: ../internal/catch_reporter_registrars.hpp
@@ -7464,7 +7841,6 @@
 #define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED
 
 #include <sstream>
-#include <iostream>
 #include <string>
 #include <vector>
 
@@ -7507,7 +7883,7 @@
         XmlWriter()
         :   m_tagIsOpen( false ),
             m_needsNewline( false ),
-            m_os( &std::cout )
+            m_os( &Catch::cout() )
         {}
 
         XmlWriter( std::ostream& os )
@@ -7677,81 +8053,90 @@
 
 }
 namespace Catch {
-    class XmlReporter : public SharedImpl<IReporter> {
+    class XmlReporter : public StreamingReporterBase {
     public:
-        XmlReporter( ReporterConfig const& config ) : m_config( config ), m_sectionDepth( 0 ) {}
+        XmlReporter( ReporterConfig const& _config )
+        :   StreamingReporterBase( _config ),
+            m_sectionDepth( 0 )
+        {}
+
+        virtual ~XmlReporter();
 
         static std::string getDescription() {
             return "Reports test results as an XML document";
         }
-        virtual ~XmlReporter();
 
-    private: // IReporter
-
-        virtual bool shouldRedirectStdout() const {
-            return true;
+    public: // StreamingReporterBase
+        virtual ReporterPreferences getPreferences() const {
+            ReporterPreferences prefs;
+            prefs.shouldRedirectStdOut = true;
+            return prefs;
         }
 
-        virtual void StartTesting() {
-            m_xml.setStream( m_config.stream() );
+        virtual void noMatchingTestCases( std::string const& s ) {
+            StreamingReporterBase::noMatchingTestCases( s );
+        }
+
+        virtual void testRunStarting( TestRunInfo const& testInfo ) {
+            StreamingReporterBase::testRunStarting( testInfo );
+            m_xml.setStream( stream );
             m_xml.startElement( "Catch" );
-            if( !m_config.fullConfig()->name().empty() )
-                m_xml.writeAttribute( "name", m_config.fullConfig()->name() );
+            if( !m_config->name().empty() )
+                m_xml.writeAttribute( "name", m_config->name() );
         }
 
-        virtual void EndTesting( const Totals& totals ) {
-            m_xml.scopedElement( "OverallResults" )
-                .writeAttribute( "successes", totals.assertions.passed )
-                .writeAttribute( "failures", totals.assertions.failed )
-                .writeAttribute( "expectedFailures", totals.assertions.failedButOk );
-            m_xml.endElement();
-        }
-
-        virtual void StartGroup( const std::string& groupName ) {
+        virtual void testGroupStarting( GroupInfo const& groupInfo ) {
+            StreamingReporterBase::testGroupStarting( groupInfo );
             m_xml.startElement( "Group" )
-                .writeAttribute( "name", groupName );
+                .writeAttribute( "name", groupInfo.name );
         }
 
-        virtual void EndGroup( const std::string&, const Totals& totals ) {
-            m_xml.scopedElement( "OverallResults" )
-                .writeAttribute( "successes", totals.assertions.passed )
-                .writeAttribute( "failures", totals.assertions.failed )
-                .writeAttribute( "expectedFailures", totals.assertions.failedButOk );
-            m_xml.endElement();
+        virtual void testCaseStarting( TestCaseInfo const& testInfo ) {
+            StreamingReporterBase::testCaseStarting(testInfo);
+            m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
+
+            if ( m_config->showDurations() == ShowDurations::Always )
+                m_testCaseTimer.start();
         }
 
-        virtual void StartSection( const std::string& sectionName, const std::string& description ) {
+        virtual void sectionStarting( SectionInfo const& sectionInfo ) {
+            StreamingReporterBase::sectionStarting( sectionInfo );
             if( m_sectionDepth++ > 0 ) {
                 m_xml.startElement( "Section" )
-                    .writeAttribute( "name", trim( sectionName ) )
-                    .writeAttribute( "description", description );
-            }
-        }
-        virtual void NoAssertionsInSection( const std::string& ) {}
-        virtual void NoAssertionsInTestCase( const std::string& ) {}
-
-        virtual void EndSection( const std::string& /*sectionName*/, const Counts& assertions ) {
-            if( --m_sectionDepth > 0 ) {
-                m_xml.scopedElement( "OverallResults" )
-                    .writeAttribute( "successes", assertions.passed )
-                    .writeAttribute( "failures", assertions.failed )
-                    .writeAttribute( "expectedFailures", assertions.failedButOk );
-                m_xml.endElement();
+                    .writeAttribute( "name", trim( sectionInfo.name ) )
+                    .writeAttribute( "description", sectionInfo.description );
             }
         }
 
-        virtual void StartTestCase( const Catch::TestCaseInfo& testInfo ) {
-            m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) );
-            m_currentTestSuccess = true;
-        }
+        virtual void assertionStarting( AssertionInfo const& ) { }
 
-        virtual void Result( const Catch::AssertionResult& assertionResult ) {
-            if( !m_config.fullConfig()->includeSuccessfulResults() && assertionResult.getResultType() == ResultWas::Ok )
-                return;
+        virtual bool assertionEnded( AssertionStats const& assertionStats ) {
+            const AssertionResult& assertionResult = assertionStats.assertionResult;
 
+            // Print any info messages in <Info> tags.
+            if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) {
+                for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end();
+                        it != itEnd;
+                        ++it ) {
+                    if( it->type == ResultWas::Info ) {
+                        m_xml.scopedElement( "Info" )
+                            .writeText( it->message );
+                    } else if ( it->type == ResultWas::Warning ) {
+                        m_xml.scopedElement( "Warning" )
+                            .writeText( it->message );
+                    }
+                }
+            }
+
+            // Drop out if result was successful but we're not printing them.
+            if( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) )
+                return true;
+
+            // Print the expression if there is one.
             if( assertionResult.hasExpression() ) {
                 m_xml.startElement( "Expression" )
                     .writeAttribute( "success", assertionResult.succeeded() )
+					.writeAttribute( "type", assertionResult.getTestMacroName() )
                     .writeAttribute( "filename", assertionResult.getSourceInfo().file )
                     .writeAttribute( "line", assertionResult.getSourceInfo().line );
 
@@ -7759,58 +8144,96 @@
                     .writeText( assertionResult.getExpression() );
                 m_xml.scopedElement( "Expanded" )
                     .writeText( assertionResult.getExpandedExpression() );
-                m_currentTestSuccess &= assertionResult.succeeded();
             }
 
+            // And... Print a result applicable to each result type.
             switch( assertionResult.getResultType() ) {
                 case ResultWas::ThrewException:
                     m_xml.scopedElement( "Exception" )
                         .writeAttribute( "filename", assertionResult.getSourceInfo().file )
                         .writeAttribute( "line", assertionResult.getSourceInfo().line )
                         .writeText( assertionResult.getMessage() );
-                    m_currentTestSuccess = false;
+                    break;
+                case ResultWas::FatalErrorCondition:
+                    m_xml.scopedElement( "Fatal Error Condition" )
+                        .writeAttribute( "filename", assertionResult.getSourceInfo().file )
+                        .writeAttribute( "line", assertionResult.getSourceInfo().line )
+                        .writeText( assertionResult.getMessage() );
                     break;
                 case ResultWas::Info:
                     m_xml.scopedElement( "Info" )
                         .writeText( assertionResult.getMessage() );
                     break;
                 case ResultWas::Warning:
-                    m_xml.scopedElement( "Warning" )
-                        .writeText( assertionResult.getMessage() );
+                    // Warning will already have been written
                     break;
                 case ResultWas::ExplicitFailure:
                     m_xml.scopedElement( "Failure" )
                         .writeText( assertionResult.getMessage() );
-                    m_currentTestSuccess = false;
                     break;
-                case ResultWas::Unknown:
-                case ResultWas::Ok:
-                case ResultWas::FailureBit:
-                case ResultWas::ExpressionFailed:
-                case ResultWas::Exception:
-                case ResultWas::DidntThrowException:
+                default:
                     break;
             }
+
             if( assertionResult.hasExpression() )
                 m_xml.endElement();
+
+            return true;
         }
 
-        virtual void Aborted() {
-            // !TBD
+        virtual void sectionEnded( SectionStats const& sectionStats ) {
+            StreamingReporterBase::sectionEnded( sectionStats );
+            if( --m_sectionDepth > 0 ) {
+                XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" );
+                e.writeAttribute( "successes", sectionStats.assertions.passed );
+                e.writeAttribute( "failures", sectionStats.assertions.failed );
+                e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk );
+
+                if ( m_config->showDurations() == ShowDurations::Always )
+                    e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds );
+
+                m_xml.endElement();
+            }
         }
 
-        virtual void EndTestCase( const Catch::TestCaseInfo&, const Totals&, const std::string&, const std::string& ) {
-            m_xml.scopedElement( "OverallResult" ).writeAttribute( "success", m_currentTestSuccess );
+        virtual void testCaseEnded( TestCaseStats const& testCaseStats ) {
+            StreamingReporterBase::testCaseEnded( testCaseStats );
+            XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" );
+            e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() );
+
+            if ( m_config->showDurations() == ShowDurations::Always )
+                e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() );
+
+            m_xml.endElement();
+        }
+
+        virtual void testGroupEnded( TestGroupStats const& testGroupStats ) {
+            StreamingReporterBase::testGroupEnded( testGroupStats );
+            // TODO: Check testGroupStats.aborting and act accordingly.
+            m_xml.scopedElement( "OverallResults" )
+                .writeAttribute( "successes", testGroupStats.totals.assertions.passed )
+                .writeAttribute( "failures", testGroupStats.totals.assertions.failed )
+                .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk );
+            m_xml.endElement();
+        }
+
+        virtual void testRunEnded( TestRunStats const& testRunStats ) {
+            StreamingReporterBase::testRunEnded( testRunStats );
+            m_xml.scopedElement( "OverallResults" )
+                .writeAttribute( "successes", testRunStats.totals.assertions.passed )
+                .writeAttribute( "failures", testRunStats.totals.assertions.failed )
+                .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk );
             m_xml.endElement();
         }
 
     private:
-        ReporterConfig m_config;
-        bool m_currentTestSuccess;
+        Timer m_testCaseTimer;
         XmlWriter m_xml;
         int m_sectionDepth;
     };
 
+     INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter )
+
 } // end namespace Catch
 
 // #included from: ../reporters/catch_reporter_junit.hpp
@@ -7937,7 +8360,7 @@
                     xml.writeAttribute( "classname", className );
                     xml.writeAttribute( "name", name );
                 }
-                xml.writeAttribute( "time", toString( sectionNode.stats.durationInSeconds ) );
+                xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) );
 
                 writeAssertions( sectionNode );
 
@@ -7970,6 +8393,7 @@
                 std::string elementName;
                 switch( result.getResultType() ) {
                     case ResultWas::ThrewException:
+                    case ResultWas::FatalErrorCondition:
                         elementName = "error";
                         break;
                     case ResultWas::ExplicitFailure:
@@ -8028,8 +8452,6 @@
 // #included from: ../reporters/catch_reporter_console.hpp
 #define TWOBLUECUBES_CATCH_REPORTER_CONSOLE_HPP_INCLUDED
 
-#include <cstring>
-
 namespace Catch {
 
     struct ConsoleReporter : StreamingReporterBase {
@@ -8164,6 +8586,11 @@
                         passOrFail = "FAILED";
                         messageLabel = "due to unexpected exception with message";
                         break;
+                    case ResultWas::FatalErrorCondition:
+                        colour = Colour::Error;
+                        passOrFail = "FAILED";
+                        messageLabel = "due to a fatal error condition";
+                        break;
                     case ResultWas::DidntThrowException:
                         colour = Colour::Error;
                         passOrFail = "FAILED";
@@ -8281,6 +8708,9 @@
             stream  << " host application.\n"
                     << "Run with -? for options\n\n";
 
+            if( m_config->rngSeed() != 0 )
+                stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n";
+
             currentTestRunInfo.used = true;
         }
         void lazyPrintGroupInfo() {
@@ -8452,15 +8882,6 @@
         void printSummaryDivider() {
             stream << getLineOfChars<'-'>() << "\n";
         }
-        template<char C>
-        static char const* getLineOfChars() {
-            static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0};
-            if( !*line ) {
-                memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 );
-                line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0;
-            }
-            return line;
-        }
 
     private:
         bool m_headerPrinted;
@@ -8569,6 +8990,13 @@
                         printExpressionWas();
                         printRemainingMessages();
                         break;
+                    case ResultWas::FatalErrorCondition:
+                        printResultType( Colour::Error, failedString() );
+                        printIssue( "fatal error condition with message:" );
+                        printMessage();
+                        printExpressionWas();
+                        printRemainingMessages();
+                        break;
                     case ResultWas::DidntThrowException:
                         printResultType( Colour::Error, failedString() );
                         printIssue( "expected exception, got none" );
@@ -8798,8 +9226,6 @@
     Matchers::Impl::StdString::EndsWith::~EndsWith() {}
 
     void Config::dummy() {}
-
-    INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( "xml", XmlReporter )
 }
 
 #ifdef __clang__
@@ -8988,9 +9414,13 @@
 #define TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED
 
 #ifdef __clang__
-#pragma clang diagnostic pop
+#    ifdef __ICC // icpc defines the __clang__ macro
+#        pragma warning(pop)
+#    else
+#        pragma clang diagnostic pop
+#    endif
 #elif defined __GNUC__
-#pragma GCC diagnostic pop
+#    pragma GCC diagnostic pop
 #endif
 
 #endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED