diff --git a/scripts/eventgen/README.md b/scripts/eventgen/README.md
index 30ad5fed22324008c5ecd2002357b73c3d818505..478c8fb83cf7efa97b80a13f033d3fa43760166c 100644
--- a/scripts/eventgen/README.md
+++ b/scripts/eventgen/README.md
@@ -1,10 +1,10 @@
 # Events Generator Script
 
-This script generates Events.h, Topics.h and EventStrings.cpp from a list of
-SCXML files representing the state machines of a project.
+This script generates the enums for all Events and Topics handled in a project, given a list of `scxml` files that describe all states and transitions. To execute the script:
 
-To execute the script:
+`eventgen.py <LIST_OF_SCXML_FILES>`
 
-`./eventgen.py <LIST_OF_SCXML_FILES>`
+The header files will be generated in the `generated/` folder.
+
+Note that the SCXML files should contain transitions with the following form: *< TOPIC >.< EVENT >*.
 
-The files will be generated in the generated/ folder.
\ No newline at end of file
diff --git a/scripts/eventgen/eventgen.py b/scripts/eventgen/eventgen.py
index 7d772986fcd552cfaa99e4da4deba95feb38d7ee..9061dba58668f3ac101cae87c690985647c2d565 100755
--- a/scripts/eventgen/eventgen.py
+++ b/scripts/eventgen/eventgen.py
@@ -23,7 +23,7 @@
 #
 import re
 import datetime
-from os.path import join
+from os.path import join, dirname
 import os
 
 import xml.etree.ElementTree as ET
@@ -32,6 +32,10 @@ from collections import OrderedDict
 
 OUTPUT_FOLDER = "generated"
 
+EVENTS_TEMPLATE_FILE = os.path.dirname(sys.argv[0]) + '/Events.h.template'
+TOPICS_TEMPLATE_FILE = os.path.dirname(sys.argv[0]) + '/Topics.h.template'
+STRINGS_TEMPLATE_FILE = os.path.dirname(sys.argv[0]) + '/EventStrings.cpp.template'
+
 #
 # ASCII art banner
 #
@@ -106,7 +110,7 @@ def generate_events(events, date):
         event_list_str += e + (", " if e != events[-1] else "")
 
     # read template
-    with open('Events.h.template', 'r') as template_file:
+    with open( EVENTS_TEMPLATE_FILE, 'r') as template_file:
         template = template_file.read()
 
     # write template
@@ -131,7 +135,7 @@ def generate_topics(topics, date):
             topics=t, string='"' + t + '"', endl=endl)
         topic_list_str += t + (", " if t != topics[-1] else "")
 
-    with open('Topics.h.template', 'r') as template_file:
+    with open( TOPICS_TEMPLATE_FILE, 'r') as template_file:
         template = template_file.read()
 
     template = template.format(date=date, enum_data=enum_str, topic_list=topic_list_str)
@@ -145,7 +149,7 @@ def generate_topics(topics, date):
 # Generate EventFunctions.cpp
 #
 def generate_functions(event_map_str, topic_map_str, date):
-    with open('EventStrings.cpp.template', 'r') as cpp_template_file:
+    with open( STRINGS_TEMPLATE_FILE, 'r') as cpp_template_file:
         cpp = cpp_template_file.read()
 
     cpp = cpp.format(date=date, event_map_data=event_map_str, topic_map_data=topic_map_str)
diff --git a/scripts/linter.sh b/scripts/linter.sh
index 70dd0adb8d12a393cc67d72cc2051353b27c2b22..ae9e1e73a401e5debf1f3377e8676e5fc95f29a4 100755
--- a/scripts/linter.sh
+++ b/scripts/linter.sh
@@ -1,18 +1,83 @@
 #!/bin/bash
 
+#
+# Usage: grepcheck <FOLDER_TO_CHECK> <STRING_TO_FIND> <EGREP_ARGS>
+#
+function grepcheck {
+
+    FILES=$(grep -rl "$2" $1 | egrep "$3")
+
+    for f in $FILES
+    do
+        # Print name of the file in red
+        echo -ne '\033\x5b\x33\x33\x6d'
+
+        echo $f
+        echo -ne '\033\x5b\x30\x6d'
+
+        if [[ $verbose -eq 1 ]]; then
+            grep --color=always -r "$2" $f -C3
+            echo ''
+        fi
+    done
+
+    echo ''
+
+    # If VERBOSE is defined then also print the context in the file
+}
+
+# Horrifying way of checking if -v or --verbose is enabled
+verbose=0
+
+case "$1" in
+-v|--verbose)
+    verbose=1
+    shift ;;
+esac
+
+case "$2" in
+-v|--verbose)
+    verbose=1
+esac
+
+# Execute checks
+echo '--------------------------- CPPCHECK'
 echo '[Linter] Executing cppcheck'
-cppcheck  --template=gcc -q --std=c++11 --enable=all \
+echo ''
+cppcheck  -U "RCC_APB1ENR_CAN2EN" --template=gcc -q --std=c++11 --enable=all \
             --suppress=unusedFunction --suppress=missingInclude --suppress=noExplicitConstructor \
-            "$@" 2>&1 | awk '
+            "$1" 2>&1 | awk '
                 function color(c,s) {
                         printf("\033[%dm%s\033[0m\n",30+c,s)
                 }
-                /warning/ {color(1,$0);next}
+                /error/ {color(1,$0);next}
+                /warning/ {color(3,$0);next}
                 /style/ {color(2,$0);next}
-                /performance/ {color(3,$0);next}
+                /performance/ {color(6,$0);next}
                 /information/ {color(4,$0);next}
                 /portability/ {color(5,$0);next}
                 {print}
                 '
+echo ''
+
+echo '--------------------------- USING NAMESPACE'
+echo '[Linter] Checking for using namespace in .h(pp) files'
+
+grepcheck $1 'using namespace' '.h(pp)?$'
+
+echo '--------------------------- GREP PRINTF'
+echo '[Linter] Checking for printf instead of TRACE'
+
+grepcheck $1 "printf" '.*'
+
+echo '--------------------------- GREP ASSERT'
+echo '[Linter] Checking if there are asserts in the code'
+
+grepcheck $1 "assert" '.*'
+
+echo '--------------------------- GREP THROW'
+echo '[Linter] Checking if there are exceptions in the code'
+
+grepcheck $1 "throw" '~*catch.hpp'
 
 #exit 0
diff --git a/scripts/mavlink_client/README.md b/scripts/mavlink_client/README.md
index 4a3c225d75fc187df6b0ac5550cb8bad7f174c9b..e8cd75de7fbd87bf075a2506218e1de6d4be6a3c 100644
--- a/scripts/mavlink_client/README.md
+++ b/scripts/mavlink_client/README.md
@@ -1,14 +1,14 @@
-# Mavlink Clinet
+# Mavlink Client
 
 These scripts can be used to transmit and receive mavlink data from a PC, either
 connected via serial port to a transceiver or directly connected to one of the boards.
 
-`make` compiles the 3 `.c` files:
+Use `make` to compile the 3 `.c` files:
 
 * continuous_tx: sends a message of raw bytes with a given length at a certain
 frequency. This was used to test the LoRa modules.
 * mavlink_demo_tx: sends a message whenever it receives a char on stdin
-* mavlink_demo_rx: receives and prints packets, eventually sending back ana ACK.
+* mavlink_demo_rx: receives and prints packets, eventually sending back an ACK.
 
-`plot.py`: reads value on stdin and plots them. Can be used piping in the output
-of mavlink_demo_rx
\ No newline at end of file
+`plot.py`: reads value on stdin and plots them. Can be used piped with the output
+of mavlink_demo_rx.
\ No newline at end of file
diff --git a/scripts/old/anakin.sh b/scripts/old/anakin.sh
deleted file mode 100755
index 52d32b6107f171f011925e0da0f9f215ff9caf98..0000000000000000000000000000000000000000
--- a/scripts/old/anakin.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-if [ $# -ne 1 ]; then
-    echo "Usage: $0 <filename.bin>"
-    exit -1
-fi;
-
-stm32flash -b 500000 -w $1 -v /dev/ttyUSB0
diff --git a/scripts/old/anakin_client_curses/.gitignore b/scripts/old/anakin_client_curses/.gitignore
deleted file mode 100644
index b051c6c57fa8b6cc588a3ebad860005ec6fcf7cc..0000000000000000000000000000000000000000
--- a/scripts/old/anakin_client_curses/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-client
diff --git a/scripts/old/anakin_client_curses/Makefile b/scripts/old/anakin_client_curses/Makefile
deleted file mode 100644
index f97ef085b53c809ca0363276bbae66fbf22e6ded..0000000000000000000000000000000000000000
--- a/scripts/old/anakin_client_curses/Makefile
+++ /dev/null
@@ -1,2 +0,0 @@
-all:
-	gcc -o client client.c -lcurses
diff --git a/scripts/old/anakin_client_curses/client.c b/scripts/old/anakin_client_curses/client.c
deleted file mode 100644
index 5c45227bddf8b8aa5ced0341a9cb56e0ce624d63..0000000000000000000000000000000000000000
--- a/scripts/old/anakin_client_curses/client.c
+++ /dev/null
@@ -1,319 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <ncurses.h>
-#include <signal.h>
-#include <stdint.h>
-#include <termios.h>
-#include <unistd.h>
-
-volatile int stop = 0;
-uint8_t buf[8192] = {0};
-uint16_t rptr = 0, wptr = 0;
-
-#pragma pack(1)
-struct vec3_t {
-    float x;
-    float y;
-    float z; 
-};
-#pragma pack()
-
-enum DataType
-{
-    DATA_VEC3  = 0,
-    DATA_QUAT  = 1,
-    DATA_FLOAT = 2,
-    DATA_INT   = 3,
-    DATA_STRING= 4,
-    DATA_LIMITED_INT = 5,
-    DATA_UINT32 = 6
-};
-
-const char* sensor_names[] = 
-{
-    "ACCEL_MPU9250",
-    "ACCEL_INEMO",
-    "ACCEL_MAX21105",
-
-    "GYRO_MPU9250",
-    "GYRO_INEMO",
-    "GYRO_FXAS21002",
-    "GYRO_MAX21105",
-
-    "COMPASS_MPU9250",
-    "COMPASS_INEMO",
-
-    "TEMP_MPU9250",
-    "TEMP_INEMO",
-    "TEMP_LPS331AP",
-    "TEMP_MAX21105",
-    "TEMP_MS580",
-
-    "PRESS_LPS331AP",
-    "PRESS_MS580",
-
-    "UNUSED_16",
-    "DMA_TX_FIFOSZ",
-    "DMA_RX_FIFOSZ",
-    "DMA_FIFO_ERR",
-    "CPU%",
-    "LOG_QUEUE_SZ"
-};
-
-uint8_t sensor_type[] = 
-{
-    DATA_VEC3,
-    DATA_VEC3,
-    DATA_VEC3,
-
-    DATA_VEC3,
-    DATA_VEC3,
-    DATA_VEC3,
-    DATA_VEC3,
-
-    DATA_VEC3,
-    DATA_VEC3,
-
-    DATA_FLOAT,
-    DATA_FLOAT,
-    DATA_FLOAT,
-    DATA_FLOAT,
-    DATA_FLOAT,
-
-    DATA_FLOAT,
-    DATA_FLOAT,
-
-    DATA_INT,
-    DATA_LIMITED_INT,
-    DATA_LIMITED_INT,
-    DATA_UINT32,
-    DATA_UINT32,
-    DATA_LIMITED_INT
-};
-
-#define NUM_SENSORS ((int)((sizeof(sensor_names) / sizeof(sensor_names[0]))))
-
-
-void on_signal(int s)
-{
-    if(!stop)
-    {
-        signal(s, on_signal);
-        stop = 1; 
-    }
-}
-
-int logline = 0;
-void log_string(const char* data, int len)
-{
-    if(len <= 0)
-        return;
-
-    move(NUM_SENSORS + 2 + logline, 10);
-    attron(COLOR_PAIR(1));
-    printw(data);
-    if(len < 30)
-        for(int i=len;i<30;i++)
-            printw(" ");
-    refresh();
-    logline = (logline+1)%20;
-}
-
-void draw_sensor(int id, int type, const void* data)
-{
-    char tmp[256] = {0};
-
-    if(id >= (int)NUM_SENSORS)
-    {
-        sprintf(tmp, "Got packet for invalid sensor %d\n", id);
-        log_string(tmp, strlen(tmp)); 
-        return;
-    }
-
-    if(type < 0 || type > 6 || type == 4)
-    {
-        sprintf(tmp, "Got packet for invalid type %d\n", type);
-        log_string(tmp, strlen(tmp)); 
-        return; 
-    }
-
-    move(1+id, 10);
-    sprintf(tmp, "%20s : ", sensor_names[id]);
-
-    uint8_t color = (type != 5) ? (type + 1) : 2;
-    attron(COLOR_PAIR(color));
-    printw(tmp);
-    attroff(COLOR_PAIR(color));
-
-    int all_null = 1;
-    for(int i=0;i<NUM_SENSORS && all_null == 1;i++)
-        if(((const char *)data)[i] != 0)
-            all_null = 0;
-    if((data == NULL || all_null == 1) && type != 5)
-    {
-        attron(COLOR_PAIR(5));
-        attron(A_BOLD);
-        printw("[NULL]                                  ");
-        attroff(A_BOLD);
-        attroff(COLOR_PAIR(5));
-        return;
-    }
-
-    const uint8_t* i            = (const uint8_t*) data;
-    const struct vec3_t* v  = (const struct vec3_t*) data;
-    const float* f          = (const float*) data;
-    const uint8_t* ui       = (const uint8_t*) data;
-    const uint32_t* ui32       = (const uint32_t*) data;
-
-    switch(type)
-    {
-        case DATA_FLOAT: 
-            sprintf(tmp, "%7.4f                      ", *f);
-            printw(tmp);
-            break;
-        case DATA_INT: 
-            sprintf(tmp, "%d                         ", *i);
-            printw(tmp);
-            break;
-        case DATA_UINT32: 
-            sprintf(tmp, "%d                         ", *ui32);
-            printw(tmp);
-            break;
-        case DATA_VEC3:
-            sprintf(tmp, "(%7.4f, %7.4f, %7.4f)", v->x, v->y, v->z);
-            printw(tmp);
-            break;
-        case DATA_LIMITED_INT:
-        {
-            uint32_t vv = (*ui * 27) / 256;
-            for(uint32_t i=0;i<27;i++)
-            {
-                if(i < vv)
-                    printw("#");
-                else
-                    printw(".");
-            }
-            break;
-        }
-        default:
-            printw("[NOT IMPLEMENTED]");
-            break;
-    }
-}
-
-int sfd;
-int init_serial(const char *device)
-{
-    sfd = open(device, O_RDWR | O_NOCTTY | O_SYNC);
-    if(sfd < 0)
-    {
-        printf("Cannot open ttyUSB0\n");
-        return 1;
-    }
-
-    struct termios tty;
-    memset(&tty, 0, sizeof(tty));
-    if(tcgetattr(sfd, &tty) != 0)
-    {
-        printf("Cannot get attributes\n");
-        return 1;
-    }
-    cfmakeraw(&tty);
-    cfsetospeed(&tty, B115200);
-    cfsetispeed(&tty, B115200);
-    tcsetattr(sfd, TCSANOW, &tty);
-
-    return 0;
-}
-
-void parse(int len)
-{
-    if(len == 0)
-        return;
-
-    uint8_t type = buf[0];
-    if(type == DATA_STRING)
-        log_string((const char *)&buf[1], len-1);
-    else 
-    {
-        uint8_t id = buf[1];
-        draw_sensor(id, type, &buf[2]);
-    }
-}
-
-int fromHex(char l)
-{
-    if(l >= '0' && l <= '9')
-        return l - '0';
-    if(l >= 'a' && l <= 'f')
-        return 10 + l - 'a';
-    if(l >= 'A' && l <= 'F')
-        return 10 + l - 'A';
-    return 0;
-}
-
-int read_and_draw()
-{
-    memset(buf, 0, sizeof(buf));
-    int bpos = 0;
-    char b;
-    char tmp = 0;
-    do {
-        read(sfd, &b, 1);
-        if(b == '\n' || b == '\r')
-            break;
-        else {
-            if(tmp == 0)
-                tmp = b;
-            else {
-                buf[bpos++] = (fromHex(tmp) << 4) | fromHex(b);
-                tmp = 0;
-            }
-        }
-    } while(1);
-    parse(bpos);
-    return 0;
-}
-
-int main(int argc, char *argv[])
-{
-    if(argc < 2)
-    {
-        printf("Usage: %s <PORT>\n", argv[0]);
-        return -1;
-    }
-    if(init_serial(argv[1]))
-        return -1;
-
-    signal(SIGINT, on_signal);
-    signal(SIGTERM, on_signal);
-
-    initscr();
-    start_color();
-    init_pair(1, COLOR_BLUE, COLOR_BLACK);
-    init_pair(2, COLOR_GREEN, COLOR_BLACK);
-    init_pair(3, COLOR_CYAN, COLOR_BLACK);
-    init_pair(4, COLOR_WHITE, COLOR_BLACK);
-    init_pair(5, COLOR_RED, COLOR_BLACK);
-    init_pair(7, COLOR_MAGENTA, COLOR_BLACK);
-    erase();
-    refresh();
-
-    log_string("Ready...", 8);
-    while(!stop)
-    {
-        if(read_and_draw() == 1)
-            stop = 1;
-        refresh();
-    }
-
-    endwin();
-
-    signal(SIGINT, 0);
-    signal(SIGTERM, 0);
-
-    return 0;
-}
diff --git a/scripts/old/excel_eventgen/EventFunctions.cpp.template b/scripts/old/excel_eventgen/EventFunctions.cpp.template
deleted file mode 100644
index 18f7690704c127e2bd5eb516097a08868e505565..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/EventFunctions.cpp.template
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (c) 2018 Skyward Experimental Rocketry
- * Authors: Luca Erbetta
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/*
- ******************************************************************************
- *                  THIS FILE IS AUTOGENERATED. DO NOT EDIT.                  *
- ******************************************************************************
- */
-
-// Generated from:  {sheet_link}
-// Autogen date:    {date}
-
-
-#include "Events.h"
-#include "Topics.h"
-
-#include <map>
-
-namespace HomeoneBoard
-{{
-
-string getEventString(uint8_t event)
-{{
-    static const map<uint8_t, string> event_string_map {{
-{event_map_data}
-    }};
-    auto   it  = event_string_map.find(event);
-    return it == event_string_map.end() ? "EV_UNKNOWN" : it->second;
-}}
-
-string getTopicString(uint8_t topic)
-{{
-	static const map<uint8_t, string> topic_string_map{{
-{topic_map_data}
-	}};
-	auto it = topic_string_map.find(topic);
-	return it == topic_string_map.end() ? "TOPIC_UNKNOWN" : it->second; 
-}}
-
-}}
\ No newline at end of file
diff --git a/scripts/old/excel_eventgen/Events.h.template b/scripts/old/excel_eventgen/Events.h.template
deleted file mode 100644
index 2c4937a1fdd509e3307baf666120b77fdd067fec..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/Events.h.template
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (c) 2018 Skyward Experimental Rocketry
- * Authors: Luca Erbetta
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/*
- ******************************************************************************
- *                  THIS FILE IS AUTOGENERATED. DO NOT EDIT.                  *
- ******************************************************************************
- */
-
-// Generated from:  {sheet_link}
-// Autogen date:    {date}
-
-#ifndef SRC_SHARED_BOARDS_HOMEONE_EVENTS_H
-#define SRC_SHARED_BOARDS_HOMEONE_EVENTS_H
-
-#include <cstdint>
-#include <string>
-
-#include "events/Event.h"
-#include "events/EventBroker.h"
-#include "EventClasses.h"
-#include "Topics.h"
-
-using std::string;
-using std::map;
-
-namespace HomeoneBoard
-{{
-/**
- * Definition of all events in the Homeone Board software
- * Refer to section 5.1.1 of the Software Design Document.
- */
-enum Events : uint8_t
-{{
-{enum_data}
-}};
-
-/**
- * @brief Returns the name of the provided event
- * 
- * @param event 
- * @return string 
- */
-string getEventString(uint8_t event);
-
-}}
-
-#endif /* SRC_SHARED_BOARDS_HOMEONE_EVENTS_H */
diff --git a/scripts/old/excel_eventgen/README.md b/scripts/old/excel_eventgen/README.md
deleted file mode 100644
index f87e46c67ebcec406b02c58e10dbe91b00a0c8d3..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Events Generator Script
-
-This script generates the Events.h and Topics.h heander file from a GoogleSheets document on Google Drive.
-
-To execute the script:
-
-```
-pip install --upgrade google-api-python-client
-pip install oauth2client
-python scripts/homeone/event_header_generator/event_generator.py
-```
-
-The first time a browser window should open asking for your credentials (use the Skyward ones).
-If it doesn't and only gives you an error, try executing it by clicking on the icon.
\ No newline at end of file
diff --git a/scripts/old/excel_eventgen/Topics.h.template b/scripts/old/excel_eventgen/Topics.h.template
deleted file mode 100644
index 43e72f7302673cf61bbb3a6605681feb08cf7236..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/Topics.h.template
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright (c) 2018 Skyward Experimental Rocketry
- * Authors: Luca Erbetta
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/*
- ******************************************************************************
- *                  THIS FILE IS AUTOGENERATED. DO NOT EDIT.                  *
- ******************************************************************************
- */
-
-// Generated from:  {sheet_link}
-// Autogen date:    {date}
-
-#ifndef SRC_SHARED_BOARDS_HOMEONE_TOPICS_H
-#define SRC_SHARED_BOARDS_HOMEONE_TOPICS_H
-
-#include <stdint.h>
-#include <string>
-
-using std::map;
-using std::string;
-
-namespace HomeoneBoard
-{{
-/**
- * Definition of various event topics to use in the EventBroker
- */
-enum Topics : uint8_t
-{{
-{enum_data}
-}};
-
-/**
- * @brief Returns the name of the provided event
- *
- * @param event
- * @return string
- */
-string getTopicString(uint8_t topic);
-
-}}  // namespace HomeoneBoard
-
-#endif /* SRC_SHARED_BOARDS_HOMEONE_TOPICS_H_ */
diff --git a/scripts/old/excel_eventgen/credentials.json b/scripts/old/excel_eventgen/credentials.json
deleted file mode 100644
index dae318afc5661116b82fe75f80f4316e538e670a..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/credentials.json
+++ /dev/null
@@ -1 +0,0 @@
-{"installed":{"client_id":"1025168905991-tv31etsgm3lecodc5c798shqciekad40.apps.googleusercontent.com","project_id":"homeone-event-ge-1540834105298","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://www.googleapis.com/oauth2/v3/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"Yhaf67HuHR4DyXZKNXWu2lre","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}}
\ No newline at end of file
diff --git a/scripts/old/excel_eventgen/event_generator.py b/scripts/old/excel_eventgen/event_generator.py
deleted file mode 100755
index e895e6fc1bf6ee8615103c51250e5e85ae4a241a..0000000000000000000000000000000000000000
--- a/scripts/old/excel_eventgen/event_generator.py
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/python3
-
-# Copyright (c) 2018 Skyward Experimental Rocketry
-# Authors: Luca Erbetta
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-
-from googleapiclient.discovery import build
-from httplib2 import Http
-from oauth2client import file, client, tools
-
-import re
-import datetime
-import sys
-from os.path import join
-import os
-
-OUTPUT_FOLDER = "generated"
-SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
-
-service = None
-
-SPREADSHEET_ID = '12TecOmDd7Uot-MvXkCbhDJRU48-XO6s5ChKDlr4AOvI'
-EVENTS_RANGE_NAME = 'EventList!A2:A'
-TOPICS_RANGE_NAME = 'Topics!B3:B'
-
-
-def auth():
-    try:
-        store = file.Storage('store.json')
-        creds = store.get()
-        if not creds or creds.invalid:
-            flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
-            creds = tools.run_flow(flow, store)
-
-        global service
-        service = build('sheets', 'v4', http=creds.authorize(Http()))
-        return True
-    except:
-        print("Authentication error:", sys.exc_info()[0])
-        return False
-
-
-def load_events():
-    result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
-                                                 range=EVENTS_RANGE_NAME).execute()
-    lines = result.get('values', [])
-
-    # Event names start with EV_ and contains only uppercase letters or underscores
-    re_event = re.compile(r'(?P<ev>^EV_([A-Z_]+)+)')
-
-    # Only return lines with valid events, remove additional data
-    events = []
-    for l in lines:
-        m = re_event.match(l[0])
-        if m is not None:
-            events.append(m.group('ev'))
-        else:
-            print("Skipped line containing invalid event: {}".format(l))
-
-    return events
-
-
-def load_topics():
-    result = service.spreadsheets().values().get(spreadsheetId=SPREADSHEET_ID,
-                                                 range=TOPICS_RANGE_NAME).execute()
-    lines = result.get('values', [])
-    re_topics = re.compile(r'(?P<topic>^TOPIC_([A-Z_]+)+)')
-
-    # Only return lines with valid topics, remove additional data
-    topics = []
-    for l in lines:
-        m = re_topics.match(l[0])
-        if m is not None:
-            topics.append(m.group('topic'))
-        else:
-            print("Skipped line containing invalid topics: {}".format(l))
-
-    return topics
-
-
-def has_duplicates(lst):
-    if len(lst) != len(set(lst)):
-        return True
-    return False
-
-
-
-print("Homeone on-board software event header generator v0.2")
-print("Google sheets API auth in progress...")
-
-if auth():
-    print("Auth successfull.")
-else:
-    exit()
-
-#directory = os.path.dirname(OUTPUT_FOLDER)
-if not os.path.exists(OUTPUT_FOLDER):
-    os.mkdir(OUTPUT_FOLDER)
-
-print("Reading from: https://docs.google.com/spreadsheets/d/12TecOmDd7Uot-MvXkCbhDJRU48-XO6s5ChKDlr4AOvI")
-
-events = load_events()
-topics = load_topics()
-
-# Check duplicates
-if has_duplicates(events):
-    print("Duplicate events found! Terminating.")
-    exit()
-
-if has_duplicates(topics):
-    print("Duplicate topics found! Terminating.")
-    exit()
-
-print("{} events loaded.".format(len(events)))
-print("{} topics loaded.".format(len(topics)))
-
-enum_str = ""
-event_map_str = ""
-
-date = datetime.datetime.now()
-link = "https://docs.google.com/spreadsheets/d/{id}".format(id=SPREADSHEET_ID)
-
-
-# Events.h generation
-
-print("Generating Events.h...")
-
-for e in events:
-    endl = ",\n" if e != events[-1] else ""
-    enum_str += "    " + e + \
-        (" = EV_FIRST_SIGNAL" if e == events[0] else "") + endl
-    event_map_str += "        {{ {event}, {string} }}{endl}".format(
-        event=e, string='"' + e + '"', endl=endl)
-
-with open('Events.h.template', 'r') as template_file:
-    template = template_file.read()
-
-template = template.format(sheet_link=link, date=date,
-                           enum_data=enum_str)
-
-with open(join(OUTPUT_FOLDER, 'Events.h'), 'w') as header_file:
-    header_file.write(template)
-
-print("Events.h successfully generated.")
-# Topics.h generation
-
-print("Generating Topics.h...")
-enum_str = ""
-topic_map_str = ""
-
-for t in topics:
-    endl = ",\n" if t != topics[-1] else ""
-    enum_str += "    " + t + endl
-    topic_map_str += "        {{ {topics}, {string} }}{endl}".format(
-        topics=t, string='"' + t + '"', endl=endl)
-
-with open('Topics.h.template', 'r') as template_file:
-    template = template_file.read()
-
-template = template.format(sheet_link=link, date=date,
-                           enum_data=enum_str)
-
-with open(join(OUTPUT_FOLDER, 'Topics.h'), 'w') as header_file:
-    header_file.write(template)
-
-with open('EventFunctions.cpp.template', 'r') as cpp_template_file:
-    cpp = cpp_template_file.read()
-
-cpp = cpp.format(sheet_link=link, date=date,
-                 event_map_data=event_map_str, topic_map_data=topic_map_str)
-
-with open(join(OUTPUT_FOLDER, 'EventFunctions.cpp'), 'w') as cpp_file:
-    cpp_file.write(cpp)
-
-print("Topics.h successfully generated.")
-
-print()
-print("All files successfully generated. Please move Events.h, Topics.h, EventFunction.cpp into the Homeone board folder.")
-print(".... Done.")
diff --git a/scripts/old/gen_fault_headers.py b/scripts/old/gen_fault_headers.py
deleted file mode 100755
index 0a5badbdaac96f3de9d501d912fbe39c1f3f4ef2..0000000000000000000000000000000000000000
--- a/scripts/old/gen_fault_headers.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (c) 2017 Skyward Experimental Rocketry
-# Authors: Alain Carlucci
-# 
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-# 
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-# 
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-
-import csv,string,hashlib,datetime,sys
-
-if len(sys.argv) != 3:
-    print("Usage: %s <CSV File> <Output header file>" % (sys.argv[0]))
-    exit(-1)
-
-headerLine = None
-
-newLines = []
-
-lineCtr = 0
-curCatId = 0
-categories={}
-enums={}
-
-import hashlib
-
-def fileHash(filename):
-    h = hashlib.sha1()
-    with open(filename, 'rb', buffering=0) as f:
-        for b in iter(lambda : f.read(128*1024), b''):
-            h.update(b)
-    return h.hexdigest()
-
-def genEnum(name, s, inc):
-    a = ('''enum class %s
-{
-''') % (name,);
-    cnt = 0
-    for i in s:
-        if inc:
-            a += "    " + i + " = " + str(cnt) + ",\n"
-        else:
-            a += "    " + i + " = " + str(s[i]) + ",\n"
-        cnt += 1
-    a += "};\n"
-    a += "const std::size_t %s_SIZE = %d;\n" %(name, cnt)
-    return a
-
-def genHeaderFile(fileName,csvFile):
-    print("[*] Generating header file (%s)" %(fileName,))
-    content = ('''/* Copyright (c) 2017 Skyward Experimental Rocketry
- * Authors: Alain Carlucci
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-/*
- ******************************************************************************
- *                  THIS FILE IS AUTOGENERATED. DO NOT EDIT.                  *
- ******************************************************************************
- */
-
-// CSV File:         %s
-// SHA1 of CSV File: %s
-// Autogen date:     %s
-
-#include <cstdint>
-
-#ifndef SKYWARD_FAULT_CTRL_LIST_H
-#define SKYWARD_FAULT_CTRL_LIST_H
-
-''') % (csvFile, fileHash(csvFile), datetime.datetime.now())
-    content += genEnum("Fault", enums, True)
-    content += "\nnamespace FaultCounterData\n{\n\n"
-    content += genEnum("FaultCategory", categories, False)
-    content += '''
-
-// Usage: categoryID = FaultCounter::FaultToCategory[faultID];
-const uint32_t FaultToCategory[] = 
-{
-    '''
-    colCnt = 0
-    for i in enums:
-        content += "%d, " % (categories[enums[i]], )
-        colCnt += 1
-        if colCnt == 20:
-            content += "\n    "
-            colCnt = 0
-    content += '''
-}; /* CategoryMapping */
-
-} /* FaultCounterData */
-
-#endif /* SKYWARD_FAULT_CTRL_LIST_H */
-
-'''
-    try:
-        with open(fileName, "w") as f:
-            f.write(content)
-        print("[+] Written %d lines in %s" % (len(content.split("\n")), fileName))
-    except:
-        print("[!] Cannot open %s for writing.", fileName)
-        exit(-1)
-
-
-def checkForGoodName(n):
-    if len(n) == 0:
-        return False
-
-    if n[0] not in string.ascii_uppercase:
-        return False
-
-    for x in n:
-        if x not in string.ascii_uppercase + string.digits + '_':
-            return False
-
-    if n[-1] not in string.ascii_uppercase + string.digits:
-        return False
-
-    return True
-
-def genEnumName(cat,name):
-    ctr = 2
-    
-    genBName = "F_" + cat + "_" + name
-    genName = genBName
-
-    while genName in enums:
-        genName = genBName + "_" + str(ctr) 
-        ctr += 1
-
-    return genName
-
-# return False: csv file is ok
-# return True: csv file must be updated
-def handleLine(r):
-    global lineCtr,categories,newLines,enums,curCatId
-
-    if len(r) != 4:
-        print("[!] Parsing error at line %d. I'm expecting 4 fields" % (lineCtr,))
-        exit(-1)
-
-    curCat = r[0].strip().upper()
-    curName = r[1].strip().upper()
-    curDesc = r[2].strip()
-    curEnum = r[3].strip().upper()
-
-    if checkForGoodName(curCat) == False:
-        print("[!] Invalid category at line %d." % (lineCtr,))
-        exit(-1)
-
-    if checkForGoodName(curName) == False:
-        print("[!] Invalid name at line %d." % (lineCtr,))
-        exit(-1)
-
-    if len(curEnum) > 0 and (checkForGoodName(curEnum) == False or curEnum in enums):
-        print("[!] Invalid generated name at line %d." % (lineCtr,))
-        exit(-1)
-
-    retVal = False
-    if len(curEnum) == 0:
-        curEnum = genEnumName(curCat, curName)
-        retVal = True
-
-    if curCat not in categories:
-        print("[+] Added category '%s'" % (curCat,))
-        categories[curCat] = curCatId
-        curCatId += 1
-
-    print("[+] Added %s in category %s" %(curEnum,curCat))
-    enums[curEnum] = curCat
-
-    newLines.append([curCat, curName, curDesc, curEnum])
-    return retVal
-
-mustUpdate = False
-print("[*] Opening %s..." % (sys.argv[1],))
-try:
-    with open(sys.argv[1], "r") as csvfile:
-        r = csv.reader(csvfile, delimiter=',', quotechar='"')
-        for row in r:
-            lineCtr += 1
-            if headerLine is None:
-                headerLine = row
-                continue
-            if handleLine(row):
-                mustUpdate = True
-except Exception as e:
-    print("[!] Cannot open %s for reading: %s!" %(sys.argv[1],str(e)))
-    exit(-1)
-
-if not mustUpdate:
-    print("[+] No need to update the csv file.")
-else:
-    print("[*] Updating %s..." % (sys.argv[1],))
-
-    try:
-        with open(sys.argv[1], "w") as csvfile:
-            r = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
-            r.writerow(headerLine)
-            for row in newLines:
-                r.writerow(row)
-            print("[+] Successfully updated csv file")
-    except:
-        print("[!] Cannot open %s for writing!" %(sys.argv[1],))
-        exit(-1)
-
-genHeaderFile(sys.argv[2], sys.argv[1])
diff --git a/scripts/openocd-flash.sh b/scripts/openocd/openocd-flash.sh
similarity index 100%
rename from scripts/openocd-flash.sh
rename to scripts/openocd/openocd-flash.sh
diff --git a/scripts/start_openocd.sh b/scripts/openocd/start_openocd.sh
similarity index 100%
rename from scripts/start_openocd.sh
rename to scripts/openocd/start_openocd.sh
diff --git a/scripts/scxml2plant/scxml2plant.sh b/scripts/scxml2plant/scxml2plant.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dbd1f04907a38ead88b5e27d8ae037cf95b88bac
--- /dev/null
+++ b/scripts/scxml2plant/scxml2plant.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# Input checks
+if [ "$#" -ne 1 ]; then
+   echo "Usage: scxml2plant <FOLDER_TO_SEARCH>"
+   exit 1
+fi
+
+# Find this folder when calling the script from another folder
+PATH_TO_XALAN=$(dirname $0)
+
+# Select all scxml files
+for file in $(find $1 -name "*.scxml")
+do
+    # generate plantuml
+    INPUT_XML=$file
+    OUTPUT_NAME=$(dirname $file)/$(basename -s ".scxml" $file).plantuml
+    echo "Input file: " $INPUT_XML " Output basename: " $OUTPUT_NAME
+
+    java -cp $PATH_TO_XALAN/xalan/xalan.jar \
+    -Dorg.apache.xerces.xni.parser.XMLParserConfiguration=org.apache.xerces.parsers.XIncludeParserConfiguration org.apache.xalan.xslt.Process \
+    -IN $INPUT_XML -XSL $PATH_TO_XALAN/xslt/scxml2plantuml.xslt -OUT $OUTPUT_NAME
+
+    # generate README
+    README_FILE=$(dirname $file)/README.md
+
+    touch $README_FILE
+    echo "\`\`\`plantuml" > $README_FILE
+    cat $OUTPUT_NAME >> $README_FILE
+    echo "\`\`\`" >> $README_FILE
+    rm $OUTPUT_NAME
+done
diff --git a/scripts/scxml2plant/xalan/LICENSE.txt b/scripts/scxml2plant/xalan/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47ad566a4592992bb8c6cfe6bda017487dda8cf5
--- /dev/null
+++ b/scripts/scxml2plant/xalan/LICENSE.txt
@@ -0,0 +1,684 @@
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+The license above applies to this Apache Xalan release of:
+  Xalan-Java 2 - XSLT Processor
+  Xalan-Java 2 - Serializer
+  
+The license above also applies to the jar files
+xalan.jar and xsltc.jar - Xalan-Java 2 - XSLT Processor from 
+Source: http://xalan.apache.org/
+  
+The license above also applies to the jar file
+serializer.jar - Xalan-Java 2 - Serializer
+Source:  http://xalan.apache.org/
+Used by: Xalan-Java 2 and Xerces-Java 2
+
+The license above also applies to the jar file
+xercesImpl.jar - Xerces-Java 2 XML Parser.
+Source:	  http://xerces.apache.org/
+Used by:  Xalan-Java 2
+
+The license above also applies to the jar file
+xml-apis.jar - Xerces-Java 2 XML Parser.
+Source:   http://xerces.apache.org/
+Used by:  Xalan-Java 2 and release copy of Xerces-Java 2
+
+
+
+
+
+
+
+
+The following license applies to the included files:
+  tools/ant.jar
+  tools/antRun
+  tools/antRun.bat
+Source:	 http://ant.apache.org/
+Used By: Xalan's build process: java/build.xml and test/build.xml
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+/*
+ * ============================================================================
+ *                   The Apache Software License, Version 1.1
+ * ============================================================================
+ * 
+ *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ * 
+ * 1. Redistributions of  source code must  retain the above copyright  notice,
+ *    this list of conditions and the following disclaimer.
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 
+ * 3. The end-user documentation included with the redistribution, if any, must
+ *    include  the following  acknowledgment:  "This product includes  software
+ *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+ *    Alternately, this  acknowledgment may  appear in the software itself,  if
+ *    and wherever such third-party acknowledgments normally appear.
+ * 
+ * 4. The names "Ant" and  "Apache Software Foundation"  must not be used to
+ *    endorse  or promote  products derived  from this  software without  prior
+ *    written permission. For written permission, please contact
+ *    apache@apache.org.
+ * 
+ * 5. Products  derived from this software may not  be called "Apache", nor may
+ *    "Apache" appear  in their name,  without prior written permission  of the
+ *    Apache Software Foundation.
+ * 
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 
+ * This software  consists of voluntary contributions made  by many individuals
+ * on behalf of the  Apache Software Foundation.  For more  information  on the 
+ * Apache Software Foundation, please see <http://www.apache.org/>.
+ *
+ */
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license, Apache Software License, Version 1.1,
+applies to the included BCEL.jar from Apache Jakarta
+(Byte Code Engineering Library).
+Source:  http://jakarta.apache.org/bcel
+Used By: XSLTC component of xml-xalan/java
+
+The following license, Apache Software License, Version 1.1, 
+also applies to the included regexp.jar,
+jakarta-regexp-1.2.jar from Apache Jakarta.
+Source:  http://jakarta.apache.org/regexp
+Used By: BCEL.jar which is used by XSLTC component of xml-xalan/java
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+/*
+ *
+ * Copyright (c) 2001 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and 
+ *    "Apache BCEL" must not be used to endorse or promote products 
+ *    derived from this software without prior written permission. For 
+ *    written permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    "Apache BCEL", nor may "Apache" appear in their name, without 
+ *    prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the DOM documentation
+for the org.w3c.dom.* packages:
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+W3C® DOCUMENT LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
+Public documents on the W3C site are provided by the copyright holders 
+under the following license. By using and/or copying this document, 
+or the W3C document from which this statement is linked, you (the licensee) 
+agree that you have read, understood, and will comply with the following 
+terms and conditions:
+
+Permission to copy, and distribute the contents of this document, or the 
+W3C document from which this statement is linked, in any medium for any 
+purpose and without fee or royalty is hereby granted, provided that you include 
+the following on ALL copies of the document, or portions thereof, that you use:
+
+1. A link or URL to the original W3C document. 
+2. The pre-existing copyright notice of the original author, or if it 
+   doesn't exist, a notice (hypertext is preferred, but a textual representation
+    is permitted) of the form: "Copyright © [$date-of-document] World Wide Web
+    Consortium, (Massachusetts Institute of Technology, European Research
+    Consortium for Informatics and Mathematics, Keio University). All Rights 
+    Reserved. http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231" 
+3. If it exists, the STATUS of the W3C document. 
+
+When space permits, inclusion of the full text of this NOTICE should be provided. 
+We request that authorship attribution be provided in any software, documents, 
+or other items or products that you create pursuant to the implementation of the
+contents of this document, or any portion thereof.
+
+No right to create modifications or derivatives of W3C documents is granted pursuant
+to this license. However, if additional requirements (documented in the Copyright FAQ)
+are satisfied, the right to create modifications or derivatives is sometimes granted
+by the W3C to individuals complying with those requirements.
+
+THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS
+OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
+THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE
+IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS,
+COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE
+OR IMPLEMENTATION OF THE CONTENTS THEREOF.
+
+The name and trademarks of copyright holders may NOT be used in advertising
+or publicity pertaining to this document or its contents without specific,
+written prior permission. Title to copyright in this document will at all
+times remain with copyright holders.
+
+
+----------------------------------------------------------------------------
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license
+can be used with materials other than those owned by the W3C, moves information
+on style sheets, DTDs, and schemas to the Copyright FAQ, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version
+of the license, and removes the ambiguous grant of "use". See the older
+formulation for the policy prior to this date. Please see our Copyright FAQ for
+common questions about using materials from our site, such as the translating
+or annotating specifications. Other questions about this notice can be directed
+to site-policy@w3.org.
+
+
+Joseph Reagle <mailto:site-policy@w3.org 
+Last revised by Reagle $Date: 2005-07-19 12:33:09 -0400 (Tue, 19 Jul 2005) $
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+
+The following license applies to the DOM software,
+for the org.w3c.dom.* packages in jar file xml-apis.jar:
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+W3C® SOFTWARE NOTICE AND LICENSE
+http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
+This work (and included software, documentation such as READMEs,
+or other related items) is being provided by the copyright holders
+under the following license. By obtaining, using and/or copying this
+work, you (the licensee) agree that you have read, understood, and will
+comply with the following terms and conditions.
+
+Permission to copy, modify, and distribute this software and its
+documentation, with or without modification, for any purpose and
+without fee or royalty is hereby granted, provided that you include
+the following on ALL copies of the software and documentation or
+portions thereof, including modifications:
+
+1. The full text of this NOTICE in a location viewable to users of the
+   redistributed or derivative work. 
+2. Any pre-existing intellectual property disclaimers, notices,
+   or terms and conditions. If none exist, the W3C Software Short Notice
+   should be included (hypertext is preferred, text is permitted) within
+   the body of any redistributed or derivative code. 
+3. Notice of any changes or modifications to the files, including the
+   date changes were made. (We recommend you provide URIs to the location
+   from which the code is derived.) 
+   
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
+MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
+NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
+PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
+ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
+
+The name and trademarks of copyright holders may NOT be used in advertising
+or publicity pertaining to the software without specific, written prior
+permission. Title to copyright in this software and any associated documentation
+will at all times remain with copyright holders.
+
+
+____________________________________
+
+This formulation of W3C's notice and license became active on December 31 2002.
+This version removes the copyright ownership notice such that this license can
+be used with materials other than those owned by the W3C, reflects that ERCIM
+is now a host of the W3C, includes references to this specific dated version
+of the license, and removes the ambiguous grant of "use". Otherwise, this
+version is the same as the previous version and is written so as to preserve
+the Free Software Foundation's assessment of GPL compatibility and OSI's
+certification under the Open Source Definition. Please see our Copyright FAQ
+for common questions about using materials from our site, including specific
+terms and conditions for packages like libwww, Amaya, and Jigsaw. Other
+questions about this notice can be directed to site-policy@w3.org.
+ 
+
+Joseph Reagle <mailto:site-policy@w3.org 
+Last revised by Reagle $Date: 2005-07-19 12:33:09 -0400 (Tue, 19 Jul 2005) $
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the SAX software,
+for the org.xml.sax.* packages in jar file xml-apis.jar:
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+This module, both source code and documentation, is in the Public Domain,
+and comes with NO WARRANTY. See http://www.saxproject.org for further information. 
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the jar file 
+java_cup.jar - LALR Parser Generator for Java(TM).
+Source:  http://www.cs.princeton.edu/~appel/modern/java/CUP
+Used By: XSLTC component of xml-xalan/java
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+CUP Parser Generator Copyright Notice, License, and Disclaimer
+
+Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian 
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, provided 
+that the above copyright notice appear in all copies and that both
+the copyright notice and this permission notice and warranty disclaimer 
+appear in supporting documentation, and that the names of the authors 
+or their employers not be used in advertising or publicity pertaining 
+to distribution of the software without specific, written prior permission. 
+
+The authors and their employers disclaim all warranties with regard to 
+this software, including all implied warranties of merchantability 
+and fitness. In no event shall the authors or their employers be liable 
+for any special, indirect or consequential damages or any damages 
+whatsoever resulting from loss of use, data or profits, whether in an action 
+of contract, negligence or other tortious action, arising out of or 
+in connection with the use or performance of this software. 
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the jar file runtime.jar - Component
+of JavaCup: LALR Parser Generator for Java(TM).
+Source:  http://www.cs.princeton.edu/~appel/modern/java/CUP
+Used By: XSLTC component of xml-xalan/java
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+CUP Parser Generator Copyright Notice, License, and Disclaimer
+(runtime.jar component)
+
+Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian 
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, provided 
+that the above copyright notice appear in all copies and that both
+the copyright notice and this permission notice and warranty disclaimer 
+appear in supporting documentation, and that the names of the authors 
+or their employers not be used in advertising or publicity pertaining 
+to distribution of the software without specific, written prior permission. 
+
+The authors and their employers disclaim all warranties with regard to 
+this software, including all implied warranties of merchantability 
+and fitness. In no event shall the authors or their employers be liable 
+for any special, indirect or consequential damages or any damages 
+whatsoever resulting from loss of use, data or profits, whether in an action 
+of contract, negligence or other tortious action, arising out of or 
+in connection with the use or performance of this software. 
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the JLEX jar file 
+JLex.jar - A Lexical Analyzer Generator for Java(TM).
+Source:  http://www.cs.princeton.edu/~appel/modern/java/JLex
+Used By: XSLTC component of xml-xalan/java
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+JLEX COPYRIGHT NOTICE, LICENSE AND DISCLAIMER.
+
+Copyright 1996-2000 by Elliot Joel Berk and C. Scott Ananian 
+
+Permission to use, copy, modify, and distribute this software and its 
+documentation for any purpose and without fee is hereby granted, 
+provided that the above copyright notice appear in all copies and 
+that both the copyright notice and this permission notice and 
+warranty disclaimer appear in supporting documentation, and that the 
+name of the authors or their employers not be used in advertising or 
+publicity pertaining to distribution of the software without specific, 
+written prior permission. 
+
+The authors and their employers disclaim all warranties with regard 
+to this software, including all implied warranties of merchantability and 
+fitness. In no event shall the authors or their employers be liable for any
+special, indirect or consequential damages or any damages whatsoever resulting 
+from loss of use, data or profits, whether in an action of contract, 
+negligence or other tortious action, arising out of or in connection
+with the use or performance of this software. 
+
+Java is a trademark of Sun Microsystems, Inc. References to the Java 
+programming language in relation to JLex are not meant to imply that 
+Sun endorses this product. 
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+
+
+
+
+
+
+
+
+The following license applies to the jar file 
+stylebook-1.0-b3_xalan-2.jar - Tool for generating Xalan documentation. 
+Integrated with Xalan-Java 2 and Xerces 2.
+Source:  http://svn.apache.org/viewvc/xml/stylebook/
+Used by: Xalan-Java 2, Xalan-C++
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 1999 The Apache Software Foundation.  All rights 
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:  
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Xalan", "Xerces", and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written 
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation and was
+ * originally based on software copyright (c) 1999, International
+ * Business Machines, Inc., http://www.apache.org.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
diff --git a/scripts/scxml2plant/xalan/NOTICE.txt b/scripts/scxml2plant/xalan/NOTICE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..132f8bccd53579fb004f2b5d095588d3ff9e832a
--- /dev/null
+++ b/scripts/scxml2plant/xalan/NOTICE.txt
@@ -0,0 +1,80 @@
+   =========================================================================
+   ==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
+   ==  Version 2.0, in this case for the Apache Xalan Java distribution.  ==
+   =========================================================================
+
+   Apache Xalan (Xalan XSLT processor)
+   Copyright 1999-2014 The Apache Software Foundation
+
+   Apache Xalan (Xalan serializer)
+   Copyright 1999-2012 The Apache Software Foundation
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   =========================================================================
+   Portions of this software was originally based on the following:
+     - software copyright (c) 1999-2002, Lotus Development Corporation.,
+       http://www.lotus.com.
+     - software copyright (c) 2001-2002, Sun Microsystems.,
+       http://www.sun.com.
+     - software copyright (c) 2003, IBM Corporation., 
+       http://www.ibm.com.
+       
+   =========================================================================
+   The binary distribution package (ie. jars, samples and documentation) of
+   this product includes software developed by the following:
+       
+     - The Apache Software Foundation 
+         - Xerces Java - see LICENSE.txt 
+         - JAXP 1.3 APIs - see LICENSE.txt
+         - Bytecode Engineering Library - see LICENSE.txt
+         - Regular Expression - see LICENSE.txt
+       
+     - Scott Hudson, Frank Flannery, C. Scott Ananian 
+         - CUP Parser Generator runtime (javacup\runtime) - see LICENSE.txt 
+ 
+   ========================================================================= 
+   The source distribution package (ie. all source and tools required to build
+   Xalan Java) of this product includes software developed by the following:
+       
+     - The Apache Software Foundation
+         - Xerces Java - see LICENSE.txt 
+         - JAXP 1.3 APIs - see LICENSE.txt
+         - Bytecode Engineering Library - see LICENSE.txt
+         - Regular Expression - see LICENSE.txt
+         - Ant - see LICENSE.txt
+         - Stylebook doc tool - see LICENSE.txt    
+       
+     - Elliot Joel Berk and C. Scott Ananian 
+         - Lexical Analyzer Generator (JLex) - see LICENSE.txt
+
+   =========================================================================       
+   Apache Xerces Java
+   Copyright 1999-2006 The Apache Software Foundation
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of Apache Xerces Java in xercesImpl.jar and xml-apis.jar
+   were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - voluntary contributions made by Paul Eng on behalf of the 
+       Apache Software Foundation that were originally developed at iClick, Inc.,
+       software copyright (c) 1999.    
+
+   =========================================================================   
+   Apache xml-commons xml-apis (redistribution of xml-apis.jar)
+
+   Apache XML Commons
+   Copyright 2001-2003,2006 The Apache Software Foundation.
+
+   This product includes software developed at
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Portions of this software were originally based on the following:
+     - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
+     - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
+     - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
+
diff --git a/scripts/scxml2plant/xalan/readme.html b/scripts/scxml2plant/xalan/readme.html
new file mode 100644
index 0000000000000000000000000000000000000000..538f4286b0308b84b3c4dcfbeb6937ab2d3d56a4
--- /dev/null
+++ b/scripts/scxml2plant/xalan/readme.html
@@ -0,0 +1,39 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+-->
+
+<html>
+<head>
+<title>
+</title>
+</head>
+<body>
+<meta content="0; URL=docs/whatsnew.html" http-equiv="Refresh">
+      Redirecting to <a href="docs/whatsnew.html">What's New in Xalan_Java 2</a>
+</body>
+</html>
+
+
+
+
+            
+            
+
+
+
+
+            
+   
diff --git a/scripts/scxml2plant/xalan/serializer.jar b/scripts/scxml2plant/xalan/serializer.jar
new file mode 100644
index 0000000000000000000000000000000000000000..175126880ff58fab0922f3e0cd25ecff765989ba
Binary files /dev/null and b/scripts/scxml2plant/xalan/serializer.jar differ
diff --git a/scripts/scxml2plant/xalan/xalan.jar b/scripts/scxml2plant/xalan/xalan.jar
new file mode 100644
index 0000000000000000000000000000000000000000..5c6c6f947071ef42c8d984f13ace5884e2bc7f03
Binary files /dev/null and b/scripts/scxml2plant/xalan/xalan.jar differ
diff --git a/scripts/scxml2plant/xalan/xercesImpl.jar b/scripts/scxml2plant/xalan/xercesImpl.jar
new file mode 100644
index 0000000000000000000000000000000000000000..0aaa990f3ecadf60d28b5395dc87bbe49da0cdd7
Binary files /dev/null and b/scripts/scxml2plant/xalan/xercesImpl.jar differ
diff --git a/scripts/scxml2plant/xalan/xml-apis.jar b/scripts/scxml2plant/xalan/xml-apis.jar
new file mode 100644
index 0000000000000000000000000000000000000000..46733464fc746776c331ecc51061f3a05e662fd1
Binary files /dev/null and b/scripts/scxml2plant/xalan/xml-apis.jar differ
diff --git a/scripts/scxml2plant/xalan/xsltc.jar b/scripts/scxml2plant/xalan/xsltc.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e11dbeca0aa04a138ea1a5fb29ed331ed02191f6
Binary files /dev/null and b/scripts/scxml2plant/xalan/xsltc.jar differ
diff --git a/scripts/scxml2plant/xslt/scxml2plantuml.xslt b/scripts/scxml2plant/xslt/scxml2plantuml.xslt
new file mode 100644
index 0000000000000000000000000000000000000000..8468b2c3f684ab52e06678ff41d747407b5751a3
--- /dev/null
+++ b/scripts/scxml2plant/xslt/scxml2plantuml.xslt
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:sc="http://www.w3.org/2005/07/scxml">
+
+  <xsl:output method="text" encoding="utf-8"/>
+  <xsl:strip-space elements="*" />
+  <xsl:template match="text()|@*"/>
+  <xsl:template match="text()|@*" mode="target"/>
+  <xsl:template match="text()|@*" mode="id"/>
+
+  <xsl:template match="/sc:scxml">
+    <xsl:text>@startuml&#xa;</xsl:text>
+    <xsl:apply-templates select="@initial"/>
+    <xsl:apply-templates select="*"/>
+    <xsl:text>@enduml&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="@initial">
+    <xsl:text>[*] --> </xsl:text>
+    <xsl:call-template name="gettargetname">
+      <xsl:with-param name="id" select="."/>
+    </xsl:call-template>
+    <xsl:text>&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:initial">
+    <xsl:apply-templates select="*"/>
+  </xsl:template>
+
+  <xsl:template match="sc:final[@id]">
+    <xsl:value-of select="concat(@id, ' : &lt;&lt;final>>&#xa;')"/>
+  </xsl:template>
+  <xsl:template match="sc:final">
+    <xsl:text>unnamed : &lt;&lt;final>>&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:state">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+
+    <xsl:apply-templates select="@initial"/>
+    <xsl:apply-templates select="*"/>
+    
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:history">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+    
+    <xsl:apply-templates select="*"/>
+
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:value-of select="concat(' : &lt;&lt;', @type, ' history>>&#xa;')"/>
+
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:parallel">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+
+    <xsl:for-each select="sc:state | sc:parallel | sc:history">
+      <xsl:apply-templates select="."/>
+      <xsl:if test="position() != last()">
+        <xsl:text>||&#xa;</xsl:text>
+      </xsl:if>
+    </xsl:for-each>
+
+    <xsl:apply-templates select="sc:transition"/>
+
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+
+  <!--get id of the state - special case for initial state-->
+  <xsl:template match="sc:state[@id] | sc:history[@id] | sc:parallel[@id] | sc:final[@id]" mode="id">
+    <xsl:value-of select="@id"/>
+  </xsl:template>
+  <xsl:template match="sc:state | sc:history | sc:parallel" mode="id">
+    <xsl:text>unnamed</xsl:text>
+  </xsl:template>
+  <xsl:template match="sc:initial" mode="id">
+    <xsl:text>[*]</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="gettargetname">
+    <xsl:param name="id"/>
+    <xsl:apply-templates select="//*[@id = $id][1]" mode="id"/>
+  </xsl:template>
+
+  <!--target can be specified explicitely as some other state-->
+  <xsl:template match="sc:transition[@target]" mode="target">
+    <xsl:call-template name="gettargetname">
+      <xsl:with-param name="id" select="@target"/>
+    </xsl:call-template>
+  </xsl:template>
+  <!--or self-transiton when @target not specified-->
+  <xsl:template match="sc:transition" mode="target">
+    <xsl:apply-templates select=".." mode="id"/>
+  </xsl:template>
+
+  <!--if 'cond' attribute exists it shall be sourrounded with brackets-->
+  <xsl:template match="sc:transition/@cond">
+    <xsl:value-of select="concat('[', ., ']')"/>
+  </xsl:template>
+
+  <xsl:template match="sc:transition">
+    <xsl:apply-templates select=".." mode="id"/>
+    <xsl:text> --> </xsl:text>
+    <xsl:apply-templates select="." mode="target"/>
+    <xsl:if test="@event or @cond">
+      <xsl:text> : </xsl:text>
+    </xsl:if>
+    <xsl:value-of select="@event"/>
+    <xsl:apply-templates select="@cond"/>
+    <xsl:text>&#xa;</xsl:text>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/scripts/scxml2plant/xslt/scxml2plantuml_finaldot.xslt b/scripts/scxml2plant/xslt/scxml2plantuml_finaldot.xslt
new file mode 100644
index 0000000000000000000000000000000000000000..f9050a05ddb1f253be2cea26a355830028cbe939
--- /dev/null
+++ b/scripts/scxml2plant/xslt/scxml2plantuml_finaldot.xslt
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:sc="http://www.w3.org/2005/07/scxml">
+
+  <xsl:output method="text" encoding="utf-8"/>
+  <xsl:strip-space elements="*" />
+  <xsl:template match="text()|@*"/>
+  <xsl:template match="text()|@*" mode="target"/>
+  <xsl:template match="text()|@*" mode="id"/>
+
+  <xsl:template match="/sc:scxml">
+    <xsl:text>@startuml&#xa;</xsl:text>
+    <xsl:apply-templates select="@initial"/>
+    <xsl:apply-templates select="*"/>
+    <xsl:text>@enduml&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="@initial">
+    <xsl:text>[*] --> </xsl:text>
+    <xsl:call-template name="gettargetname">
+      <xsl:with-param name="id" select="."/>
+    </xsl:call-template>
+    <xsl:text>&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:initial">
+    <xsl:apply-templates select="*"/>
+  </xsl:template>
+
+  <xsl:template match="sc:state">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+
+    <xsl:apply-templates select="@initial"/>
+    <xsl:apply-templates select="*"/>
+    
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:history">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+    
+    <xsl:apply-templates select="*"/>
+
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:value-of select="concat(' : &lt;&lt;', @type, ' history>>&#xa;')"/>
+
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+  <xsl:template match="sc:parallel">
+    <xsl:text>state </xsl:text>
+    <xsl:apply-templates select="." mode="id"/>
+    <xsl:text> {&#xa;</xsl:text>
+
+    <xsl:for-each select="sc:state | sc:parallel | sc:history">
+      <xsl:apply-templates select="."/>
+      <xsl:if test="position() != last()">
+        <xsl:text>||&#xa;</xsl:text>
+      </xsl:if>
+    </xsl:for-each>
+
+    <xsl:apply-templates select="sc:transition"/>
+
+    <xsl:text>}&#xa;</xsl:text>
+  </xsl:template>
+
+
+  <!--get id of the state - special case for initial state-->
+  <xsl:template match="sc:state[@id] | sc:history[@id] | sc:parallel[@id]" mode="id">
+    <xsl:value-of select="@id"/>
+  </xsl:template>
+  <xsl:template match="sc:state | sc:history | sc:parallel" mode="id">
+    <xsl:text>unnamed</xsl:text>
+  </xsl:template>
+  <xsl:template match="sc:initial | sc:final" mode="id">
+    <xsl:text>[*]</xsl:text>
+  </xsl:template>
+
+  <xsl:template name="gettargetname">
+    <xsl:param name="id"/>
+    <xsl:apply-templates select="//*[@id = $id][1]" mode="id"/>
+  </xsl:template>
+
+  <!--target can be specified explicitely as some other state-->
+  <xsl:template match="sc:transition[@target]" mode="target">
+    <xsl:call-template name="gettargetname">
+      <xsl:with-param name="id" select="@target"/>
+    </xsl:call-template>
+  </xsl:template>
+  <!--or self-transiton when @target not specified-->
+  <xsl:template match="sc:transition" mode="target">
+    <xsl:apply-templates select=".." mode="id"/>
+  </xsl:template>
+
+  <!--if 'cond' attribute exists it shall be sourrounded with brackets-->
+  <xsl:template match="sc:transition/@cond">
+    <xsl:value-of select="concat('[', ., ']')"/>
+  </xsl:template>
+
+  <xsl:template match="sc:transition">
+    <xsl:apply-templates select=".." mode="id"/>
+    <xsl:text> --> </xsl:text>
+    <xsl:apply-templates select="." mode="target"/>
+    <xsl:if test="@event or @cond">
+      <xsl:text> : </xsl:text>
+    </xsl:if>
+    <xsl:value-of select="@event"/>
+    <xsl:apply-templates select="@cond"/>
+    <xsl:text>&#xa;</xsl:text>
+  </xsl:template>
+
+</xsl:stylesheet>