diff --git a/testing/cper-convert.c b/testing/cper-convert.c
new file mode 100644
index 0000000..8d9535d
--- /dev/null
+++ b/testing/cper-convert.c
@@ -0,0 +1,266 @@
+/**
+ * A user-space application linking to the CPER-JSON conversion library which allows for easy
+ * conversion between CPER and CPER-JSON formats. 
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdio.h>
+#include <string.h>
+#include <libgen.h>
+#include <limits.h>
+#include "json.h"
+#include "../cper-parse.h"
+#include "../json-schema.h"
+
+void cper_to_json(int argc, char* argv[]);
+void json_to_cper(int argc, char* argv[]);
+void print_help(void);
+
+int main(int argc, char* argv[]) 
+{
+    //Ensure at least one argument is present.
+    if (argc < 2)
+    {
+        printf("Invalid number of arguments. See 'cper-convert --help' for command information.\n");
+        return -1;
+    }
+
+    //Run the requested command.
+    if (strcmp(argv[1], "to-json") == 0)
+        cper_to_json(argc, argv);
+    else if (strcmp(argv[1], "to-cper") == 0)
+        json_to_cper(argc, argv);
+    else if (strcmp(argv[1], "--help") == 0)
+        print_help();
+    else 
+    {
+        printf("Unrecognised argument '%s'. See 'cper-convert --help' for command information.\n", argv[1]);
+        return -1;
+    }
+
+    return 0;
+}
+
+//Command for converting a provided CPER log file into JSON.
+void cper_to_json(int argc, char* argv[])
+{
+    if (argc < 3)
+    {
+        printf("Insufficient number of arguments for 'to-json'. See 'cper-convert --help' for command information.\n");
+        return;
+    }
+
+    //Get a handle for the log file.
+    FILE* cper_file = fopen(argv[2], "r");
+    if (cper_file == NULL) 
+    {
+        printf("Could not open provided CPER file '%s', file handle returned null.\n", argv[2]);
+        return;
+    }
+
+    //Convert.
+    json_object* ir = cper_to_ir(cper_file);
+    fclose(cper_file);
+    const char* json_output = json_object_to_json_string_ext(ir, JSON_C_TO_STRING_PRETTY);
+
+    //Check whether there is a "--out" argument, if there is, then output to file instead.
+    //Otherwise, just send to console.
+    if (argc != 5)
+    {
+        printf("%s\n", json_output);
+        return;
+    }
+
+    //File out argument exists. Argument valid?
+    if (strcmp(argv[3], "--out") != 0)
+    {
+        printf("Invalid argument '%s' for command 'to-json'. See 'cper-convert --help' for command information.\n", argv[3]);
+        return;
+    }
+
+    //Try to open a file handle to the desired output file.
+    FILE* json_file = fopen(argv[4], "w");
+    if (json_file == NULL) 
+    {
+        printf("Could not get a handle for output file '%s', file handle returned null.\n", argv[4]);
+        return;
+    }
+
+    //Write out to file.
+    fwrite(json_output, strlen(json_output), 1, json_file);
+    fclose(json_file);
+}
+
+//Command for converting a provided CPER-JSON JSON file to CPER binary.
+void json_to_cper(int argc, char* argv[])
+{
+    if (argc < 5)
+    {
+        printf("Insufficient number of arguments for 'to-cper'. See 'cper-convert --help' for command information.\n");
+        return;
+    }
+
+    //Read JSON IR from file.
+    json_object* ir = json_object_from_file(argv[2]);
+    if (ir == NULL)
+    {
+        printf("Could not read JSON from file '%s', import returned null.\n", argv[2]);
+        return;
+    }
+
+    //Are we skipping validation?
+    int do_validate = 1;
+    if (argc == 6)
+    {
+        if (strcmp(argv[5], "--no-validate") == 0)
+        {
+            do_validate = 0;
+        }
+        else
+        {
+            printf("Invalid argument '%s' for command 'to-cper'. See 'cper-convert --help' for command information.\n", argv[5]);
+            return;
+        }
+    }
+
+    //Validate the JSON against specification, unless otherwise specified.
+    if (do_validate)
+    {
+        char* specification_path = NULL;
+
+        //If there is another argument pair, it must be a validation specification file path.
+        if (argc == 7)
+        {
+            //Ensure valid argument naming.
+            if (strcmp(argv[5], "--specification") != 0)
+            {
+                printf("Invalid argument '%s' for command 'to-cper'. See 'cper-convert --help' for command information.\n", argv[5]);
+                return;
+            }
+
+            specification_path = argv[6];
+        }
+        else if (argc == 5)
+        {
+            //Make the specification path the assumed default (application directory + specification/cper-json.json).
+            specification_path = malloc(PATH_MAX);
+            char* dir = dirname(argv[0]);
+            strcpy(specification_path, dir);
+            strcat(specification_path, "/specification/cper-json.json");
+        }
+        else
+        {
+            //Invalid number of arguments.
+            printf("Invalid number of arguments for command 'to-cper'. See 'cper-convert --help' for command information.\n");
+            return;
+        }
+
+        //Attempt to verify with the the specification.
+        char* error_message = malloc(JSON_ERROR_MSG_MAX_LEN);
+        int success = validate_schema_from_file(specification_path, ir, error_message);
+
+        //Free specification path (if necessary).
+        if (argc == 5)
+            free(specification_path);
+
+        //If failed, early exit before conversion.
+        if (!success)
+        {
+            printf("JSON format validation failed: %s\n", error_message);
+            free(error_message);
+            return;
+        }
+        free(error_message);
+    }
+
+    //Attempt a conversion.
+    //Open a read for the output file.
+    FILE* cper_file = fopen(argv[4], "w");
+    if (cper_file == NULL) 
+    {
+        printf("Could not open output file '%s', file handle returned null.\n", argv[4]);
+        return;
+    }
+
+    //Run the converter.
+    ir_to_cper(ir, cper_file);
+    fclose(cper_file);
+}
+
+//Command for printing help information.
+void print_help(void)
+{
+    printf(":: to-json cper.file [--out file.name]\n");
+    printf("\tConverts the provided CPER log file into JSON, by default outputting to console. If '--out' is specified,\n");
+    printf("\tThe outputted JSON will be written to the provided file name instead.\n");
+    printf("\n:: to-cper cper.json --out file.name [--no-validate] [--specification some/spec/path.json]\n");
+    printf("\tConverts the provided CPER-JSON JSON file into CPER binary. An output file must be specified with '--out'.\n");
+    printf("\tBy default, the provided JSON will try to be validated against a specification. If no specification file path\n");
+    printf("\tis provided with '--specification', then it will default to 'argv[0] + /specification/cper-json.json'.\n");
+    printf("\tIf the '--no-validate' argument is set, then the provided JSON will not be validated. Be warned, this may cause\n");
+    printf("\tpremature exit/unexpected behaviour in CPER output.\n");
+    printf("\n:: --help\n");
+    printf("\tDisplays help information to the console.\n");
+}
+
+// void test_ir_to_cper(int argc, char* argv[])
+// {
+//     if (argc < 4)
+//     {
+//         printf("Insufficient number of arguments.\n");
+//         return;
+//     }
+
+//     //Read JSON IR from file.
+//     json_object* ir = json_object_from_file(argv[2]);
+//     if (ir == NULL)
+//     {
+//         printf("Could not read IR JSON, import returned null.");
+//         return;
+//     }
+
+//     //Open a read for the output file.
+//     FILE* cper_file = fopen(argv[3], "w");
+//     if (cper_file == NULL) {
+//         printf("Could not open output file, file handle returned null.");
+//         return;
+//     }
+
+//     //Run the converter.
+//     ir_to_cper(ir, cper_file);
+//     fclose(cper_file);
+//     printf("Conversion finished!\n");
+// }
+
+// void test_cper_to_ir(int argc, char* argv[])
+// {
+//     //Get a handle for the log file.
+//     FILE* cper_file = fopen(argv[2], "r");
+//     if (cper_file == NULL) {
+//         printf("Could not open CPER record, file handle returned null.");
+//         return;
+//     }
+
+//     json_object* ir = cper_to_ir(cper_file);
+//     fclose(cper_file);
+
+//     const char* json_output = json_object_to_json_string(ir);
+//     printf("\n%s\n", json_output);
+
+//     //Test JSON validator.
+//     if (argc >= 4)
+//     {
+//         printf("Validating output with specification %s...\n", argv[3]);
+//         validate_schema_debug_enable();
+//         char* error_message = malloc(JSON_ERROR_MSG_MAX_LEN);
+//         if (!validate_schema_from_file(argv[3], ir, error_message))
+//         {
+//             printf("Validation failed: %s\n", error_message);
+//         }
+//         else
+//         {
+//             printf("Validation passed!\n");
+//         }
+//     }
+// }
\ No newline at end of file
