diff --git a/examples/hello/bpWriter/config.xml b/examples/hello/bpWriter/config.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10dfa830e33baed86ec3c2667f0bd6b67b2c8aa1
--- /dev/null
+++ b/examples/hello/bpWriter/config.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<adios-config>
+
+    <io name="Output">
+        <engine name="BPFileWriter">verbose=4;profile_units=mus</engine>
+        <transport name= "File">
+            profile_units=mus; 
+            abort_on_error;
+            have_metadata_file 
+               =
+                 no;
+        </transport>
+
+        <!-- Create a named transform and add variables to it here. 
+             name is optional, required only if it is used outside the definition
+             options is optional to pass parameters to the transformation
+        -->
+        <transform name="LossyCompression" transform="zfp" options="accuracy=0.001">
+            <var name="myMatrix"/>
+            <var name="ThisVarDoesNotExists"/>
+        </transform>
+
+        <!-- Unnamed transformation -->
+        <transform transform="bzip2">
+            <var name="myMatrix2"/>
+        </transform>
+
+        <!-- A variable can have its own private transform definition. 
+             Also its own ordered chain of transformations.
+             Also can refer to a transform defined previously
+        -->
+        <var name="myDoubles"> 
+            <transform transform="identity">verbose=DEBUG</transform>
+            <transform name="LossyCompression"/>
+        </var>
+
+        <buffer max-size-MB="20"/>
+    </io>
+
+</adios-config>
+
diff --git a/examples/hello/bpWriter/helloBPWriter.cpp b/examples/hello/bpWriter/helloBPWriter.cpp
index 0de89cdd9bb13805fabc9153566cacd6b9630222..61dcf2854aa0cd3742acc8a584da884491006adf 100644
--- a/examples/hello/bpWriter/helloBPWriter.cpp
+++ b/examples/hello/bpWriter/helloBPWriter.cpp
@@ -23,7 +23,8 @@ int main(int argc, char *argv[])
     MPI_Comm_size(MPI_COMM_WORLD, &nproc);
 
     const bool adiosDebug = true;
-    adios::ADIOS adios(MPI_COMM_WORLD, adios::Verbose::INFO, adiosDebug);
+    adios::ADIOS adios("config.xml", MPI_COMM_WORLD, adios::Verbose::INFO,
+                       adiosDebug);
 
     // Application variable
     std::vector<double> myDoubles = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
@@ -60,12 +61,15 @@ int main(int argc, char *argv[])
 
         // Define method for engine creation, it is basically straight-forward
         // parameters
-        adios::Method &bpWriterSettings = adios.DeclareMethod(
-            "SingleFile"); // default method type is BPWriter
-        bpWriterSettings.SetParameters("profile_units=mus");
-        bpWriterSettings.AddTransport(
-            "File", "profile_units=mus",
-            "have_metadata_file=no"); // uses default POSIX library
+        adios::Method &bpWriterSettings =
+            adios.DeclareMethod("Output"); // Output is defined in config.xml
+        if (!bpWriterSettings.IsUserDefined())
+        {
+            bpWriterSettings.SetParameters("profile_units=mus");
+            bpWriterSettings.AddTransport(
+                "File", "profile_units=mus",
+                "have_metadata_file=no"); // uses default POSIX library
+        }
 
         // Create engine smart pointer due to polymorphism,
         // Open returns a smart pointer to Engine containing the Derived class