diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1dcee8e4eb69e8b5456aa27bb860154c1f4a85a8..f19e88cddd510e9da55d8b770a274bc35e6ab1d7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,25 +7,33 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
 
 ## [Unreleased]
 
+## [0.10.0] - 2019-12-06
+
 ### Added
 
+- Configuration documentation 
 - Added support for syslog logging.
+- Added support for storing data via insert strings rather than prepared statements:
+  - Tango string spectrum types are always stored via insert strings to remove escape characters
+  - This work provides the basis for future batch saving of data events.
 
 ### Fixed
 
 - Close logging down in destructor so linked device server can be restarted.
+- All unit tests now pass!
 
 ### Changed
 
+- Completely redone DbConnectionTest unit tests
+  - Speeds up execution of tests
+  - Prevents database deadlock due to repeated rapid truncation of tables.
 - Build system correctly produces a major version shared object
 - Removed Clang path from build (CMake checks PATH)
 - Corrected static library build
 - Install now places header in include/hdb++/
 - Entire library now uses the global default logger from spdlog.
-
-#### Submodules
-
 - Updated spdlog submodule to release v1.4.2
+- Modern code via clang tidy
 
 ## [0.9.1] - 2019-07-18
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fd3f2a75f1445f9083e059e35d634bc3866000e2..fc968d02d0709adc2f54f06b13f4e7dd74715418 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,8 +19,8 @@ set(LIBHDBPP_TIMESCALE_NAME "libhdb++timescale")
 
 # Versioning
 set(VERSION_MAJOR "0")
-set(VERSION_MINOR "9")
-set(VERSION_PATCH "2")
+set(VERSION_MINOR "10")
+set(VERSION_PATCH "0")
 set(VERSION_METADATA "")
 set(VERSION_STRING ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
 
@@ -38,9 +38,9 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 set(CMAKE_CXX_EXTENSIONS OFF)
 
 # Build options
-option(BUILD_UNIT_TESTS "Build unit tests" ON)
-option(BUILD_BENCHMARK_TESTS "Build benchmarking tests (Forces RELEASE build)" ON)
-option(ENABLE_CLANG "Enable clang code and layout analysis" ON)
+option(BUILD_UNIT_TESTS "Build unit tests" OFF)
+option(BUILD_BENCHMARK_TESTS "Build benchmarking tests (Forces RELEASE build)" OFF)
+option(ENABLE_CLANG "Enable clang code and layout analysis" OFF)
 
 if(BUILD_UNIT_TESTS)
     message(STATUS "Unit tests will be built")
diff --git a/README.md b/README.md
index 7e97541f24281b518e0460a83d26803c465fb90b..7e451472eec5c9c6071592cb19bdbb3f9fb4d63b 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,7 @@
 [![TangoControls](https://img.shields.io/badge/-Tango--Controls-7ABB45.svg?style=flat&logo=%20data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAADo6zjiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAsFJREFUWIXtl01IFVEYht9zU%2FvTqOxShLowlOgHykWUGEjUKqiocB1FQURB0KJaRdGiaFM7gzZRLWpTq2olhNQyCtpYCP1gNyIoUTFNnxZzRs8dzvw4Q6564XLnfOf73vedc2a%2BmZEKALgHrC3CUUR8CxZFeEoFalsdM4uLmMgFoIlZLJp3A9ZE4S2oKehhlaR1BTnyg2ocnW%2FxsxEDhbYij4EPVncaeASMAavnS%2FwA8NMaqACNQCew3f4as3KZOYh2SuqTVJeQNiFpn6QGSRVjTH9W%2FiThvcCn6H6n4BvQDvQWFT%2BSIDIFDAKfE3KOAQeBfB0XGPeQvgE67P8ZoB44DvTHmFgJdOQRv%2BUjc%2BavA9siNTWemgfA3TwGquCZ3w8szFIL1ALngIZorndvgJOR0GlP2gtJkzH%2Bd0fGFxW07NqY%2FCrx5QRXcYjbCbmxF1dkBSbi8kpACah3Yi2Sys74cVyxMWY6bk5BTwgRe%2BYlSzLmxNpU3aBeJogk4XWWpJKUeiap3RJYCpQj4QWZDQCuyIAk19Auj%2BAFYGZZjTGjksaBESB8P9iaxUBIaJzjZcCQcwHdj%2BS2Al0xPOeBYYKHk4vfmQ3Y8YkIwRUb7wQGU7j2ePrA1URx93ayd8UpD8klyPbSQfCOMIO05MbI%2BDvwBbjsMdGTwlX21AAMZzEerkaI9zFkP4AeYCPBg6gNuEb6I%2FthFgN1KSQupqzoRELOSed4DGiJala1UmOMr2U%2Bl%2FTWEy9Japa%2Fy41IWi%2FJ3d4%2FkkaAw0Bz3AocArqApwTvet3O3GbgV8qqjAM7bf4N4KMztwTodcYVyelywKSCD5V3xphNXoezuTskNSl4bgxJ6jPGVJJqbN0aSV%2Bd0M0aO7FCs19Jo2lExphXaTkxdRVgQFK7DZVDZ8%2BcpdmQh3wuILh7ut3AEyt%2B51%2BL%2F0cUfwFOX0t0StltmQAAAABJRU5ErkJggg%3D%3D)](http://www.tango-controls.org) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![](https://img.shields.io/github/release/tango-controls-hdbpp/libhdbpp-timescale.svg)](https://github.com/tango-controls-hdbpp/libhdbpp-timescale/releases)
 
 - [libhdbpp-timescale](#libhdbpp-timescale)
+  - [v0.9.0 To v0.10.0 Update](#v090-To-v0100-Update)
   - [Cloning](#Cloning)
   - [Bug Reports + Feature Requests](#Bug-Reports--Feature-Requests)
   - [Documentation](#Documentation)
@@ -20,6 +21,12 @@ The library has been build against a number of other projects, these have been i
 * spdlog - Logging system
 * Catch2 - Unit test subsystem
 
+## v0.9.0 To v0.10.0 Update 
+
+This revision changes how both scalar and spectrum strings are stored. In 0.9.0 strings were escaped and quoted before being stored in the database. This had the effect that when the strings were retrieved they were still escaped/quoted. For consistency scalar strings were stored escaped/quoted.
+
+To fix this, spectrum's of strings are now stored via insert strings using both the ARRAY syntax and dollar escape method. This means when they are retrieved frm the database they are longer escaped/quoted. To match this, scalar strings are also no longer stored escaped/quoted.
+
 ## Cloning
 
 Currently this project is configured to express its dependencies as submodules. This may change in future if there is time to explore, for example, the Meson build system. To successfully clone the project and all its dependencies use the following:
diff --git a/doc/README.md b/doc/README.md
index 73dbc154a000beda96361aa5e1ba84021c24ee0a..d4368d95bd5686da5bac2e83a218df8b0af3e554 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -6,6 +6,7 @@ The documentation is purely about getting the shared library running on a correc
   - [About](#About)
   - [Building and Installation](#Building-and-Installation)
   - [DB Schema](#DB-Schema)
+  - [Configuration](#Configuration)
 
 ## About
 
@@ -18,4 +19,8 @@ The overview is in the main project [README](../README.md).
 
 ## DB Schema
 
-* [Schema](db-schema-config) guidelines and setup.
\ No newline at end of file
+* [Schema](db-schema-config) guidelines and setup.
+
+## Configuration
+
+* [Configuration](configuration) parameter details.
\ No newline at end of file
diff --git a/doc/build.md b/doc/build.md
index 451825abc5dc9cc27cc5f2635f809c9715e26d21..3f6496096e3f2c56538eeb00d623189177452306 100644
--- a/doc/build.md
+++ b/doc/build.md
@@ -88,7 +88,15 @@ cmake -DBUILD_UNIT_TESTS=ON ..
 make
 ```
 
-To run all unit tests, a postgresql database node is required with the project schema loaded up. Also note the connection string to this database node needs setting in TestHelpers.hpp. To run all tests:
+To run all unit tests, a postgresql database node is required with the project schema loaded up. There is a default connection string inside test/TestHelpers.hpp:
+
+```
+user=postgres host=localhost port=5432 dbname=hdb password=password
+```
+
+If you run the hdb timescale docker image associated with this project locally then this will connect automatically. If you wish to use a different database, edit the string in test/TestHelpers.hpp.
+
+To run all tests:
 
 ```bash
 ./test/unit-tests
diff --git a/doc/configuration.md b/doc/configuration.md
new file mode 100644
index 0000000000000000000000000000000000000000..b515712d1c91a969747607810a7f79c504b6f677
--- /dev/null
+++ b/doc/configuration.md
@@ -0,0 +1,40 @@
+# Configuration
+
+## Library Configuration Parameters
+
+Configuration parameters are as follows:
+
+| Parameter | Mandatory | Default | Description |
+|------|-----|-----|-----|
+| libname | true | None | Must be "libhdb++timescale.so" |
+| connect_string | true | None | Postgres connection string, eg user=postgres host=localhost port=5432 dbname=hdb password=password |
+| logging_level | false | error | Logging level. See table below |
+| log_file | false | false | Enable logging to file |
+| log_console | false | false | Enable logging to the console |
+| log_syslog | false | false | Enable logging to syslog |
+| log_file_name | false | None | When logging to file, this is the path and name of file to use |
+
+The logging_level parameter is case insensitive. Logging levels are as follows:
+
+| Level | Description |
+|------|-----|
+| error | Log only error level events (recommended unless debugging) |
+| warning | Log only warning level events |
+| info | Log only warning level events |
+| debug | Log only warning level events. Good for early install debugging |
+| trace | Trace level logging. Excessive level of debug, good for involved debugging |
+| disabled | Disable logging subsystem |
+
+## Configuration Example
+
+Short example LibConfiguration property value on an EventSubscriber or ConfigManager. You will HAVE to change the various parts to match your system:
+
+```
+connect_string=user=hdb-user password=password host=hdb-database port=5432 dbname=hdb
+logging_level=debug
+log_file=true
+log_syslog=false
+log_console=false
+libname=libhdb++timescale.so
+log_file_name=/tmp/hdb/es-name.log
+````
\ No newline at end of file
diff --git a/src/PqxxExtension.hpp b/src/PqxxExtension.hpp
index 2078748b5c7460ed4c25f1c3a9936f20020ab366..fbaeaf3de184063e5a5207055c9af5121b6e09c0 100644
--- a/src/PqxxExtension.hpp
+++ b/src/PqxxExtension.hpp
@@ -199,14 +199,16 @@ public:
         value.clear();
 
         std::pair<array_parser::juncture, std::string> output;
-        array_parser parser(str);
 
+        // use pqxx array parser features to get each element from the array
+        array_parser parser(str);
         output = parser.get_next();
 
         if (output.first == array_parser::juncture::row_start)
         {
             output = parser.get_next();
 
+            // loop and extract each string in turn
             while (output.first == array_parser::juncture::string_value)
             {
                 value.push_back(output.second);
@@ -221,10 +223,10 @@ public:
         }
     }
 
-    // unlike other types, when encoed to a string th
     static std::string to_string(const std::vector<std::string> &value)
     {
-        // simply use the pqxx utilities for this, rather than reinvent the wheel
+        // This function should not be used, so we do a simple basic conversion
+        // for testing only
         return "{" + separated_list(",", value.begin(), value.end()) + "}";
     }
 };