diff --git a/bvletools.user.js b/bvletools.user.js
index 3b6b7fb08721e78e01476913d555fb164c3fb3a4..cededbf538666f7a459f25ee492c3cf44ee065ee 100644
--- a/bvletools.user.js
+++ b/bvletools.user.js
@@ -1,10 +1,10 @@
 // ==UserScript==
 // @name         Bromcom VLE Tools
 // @namespace    http://radialbog9.uk/
-// @version      2024-04-23
+// @version      2024-04-23_02
 // @description  Bromcom VLE dashboard widget
 // @author       Radialbog9
-// @match        https://vle.bromcomcloud.com/Home/Dashboard
+// @match        https://vle.bromcomcloud.com/*
 // @downloadURL https://git.rb9.xyz/TheJoeCoder/bromcom-vle-to-ics/-/raw/main/bvletools.user.js
 // @updateURL https://git.rb9.xyz/TheJoeCoder/bromcom-vle-to-ics/-/raw/main/bvletools.user.js
 // @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
@@ -35,6 +35,80 @@
     </div>
 */
 
+// Behaviour page script modifications
+if (window.location.href.endsWith("/Behaviour")) {
+        // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js
+    var toCamelCase = (str) => {
+        return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) {
+            return index == 0 ? word.toLowerCase() : word.toUpperCase();
+        }).replace(/\s+/g, '');
+    }
+
+    // copied from https://vle.bromcomcloud.com/lib/pages/js/behaviour.js
+    var loadBehaviourTable = () => {
+        $(".wait").show();
+        $.ajax({
+            url: "/Behaviour/StudentBehaviour",
+            type: "Post",
+            data: null,
+            contentType: false,
+            processData: false,
+            cache: false,
+            success: function (data) {
+                console.log(data);
+                $(".wait").hide();
+                var content = "";
+                var headerContent = "";
+                if (data.behaviourStudentEventHeader.length > 0) {
+                    headerContent += "<tr>"
+                    for (var i = 0; i < data.behaviourStudentEventHeader.length; i++) {
+                        headerContent += "<th>" + data.behaviourStudentEventHeader[i].displayName.replace(/([A-Z])/g, ' $1').trim() + "</th>"
+                    }
+                    headerContent += "</tr>"
+                }
+                if (data.studentEvents.length > 0) {
+                    for (var i = 0; i < data.studentEvents.length; i++) {
+                        content += "<tr>"
+                        for (var j = 0; j < data.behaviourStudentEventHeader.length; j++) {
+                            content += '<td>' + 
+                                data.studentEvents[i][toCamelCase(data.behaviourStudentEventHeader[j].fieldName = data.behaviourStudentEventHeader[j].fieldName == "" ? data.behaviourStudentEventHeader[j].displayName : data.behaviourStudentEventHeader[j].fieldName)] + '</td>';
+                        }
+                        content += "</tr>"
+                    }
+                }
+
+                $('#Behaviour thead').empty();
+                $('#Behaviour tbody').empty();
+                $('#Behaviour thead').html(headerContent);
+                $('#Behaviour tbody').html(content);
+
+
+                $.fn.dataTable.moment('DD/MM/YYYY HH:mm');
+                $('#Behaviour').DataTable({
+                    "bPaginate": false,
+                    columnDefs: [{
+                        target: [0],
+                        type: 'datetime-moment'
+                    }],
+                    "order": [[0,'desc']],
+                    "fnDrawCallback": function () {
+                        $('th').each(function () {
+                            if (($(this).hasClass('sorting')) || ($(this).hasClass('sorting_desc'))) {
+                                $(this).attr({ title: 'Sort Ascending' });
+                            } else {
+                                $(this).attr({ title: 'Sort Descending' });
+                            }
+                        });
+                    }
+                });
+            },
+            error: function (msg) {
+                $(".wait").hide();
+            }
+        });
+    }
+}
+
 (function() {
     'use strict';
     function formatDate(date) {
@@ -63,49 +137,53 @@
 
     function timetableToClipboardProcess(data) {
         var data_str = JSON.stringify(data);
-        console.log(data_str);
+        console.log("[RB9] " + data_str);
         navigator.clipboard.writeText(data_str);
         alert("Copied to Clipboard.\n Number of lessons " + data["table"].length);
     }
 
-    $("#widgetsDahsboard .grid-stack")
-        .append("\n<div class=\"grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled\" id=\"gs_RB9Buttons\" data-color=\"danger\" data-gs-id=\"gs_RB9Buttons\" data-gs-x=\"8\" data-gs-y=\"2\" data-gs-width=\"4\" data-gs-height=\"2\" data-gs-no-resize=\"yes\">\n        <div class=\"panel panel-danger shadow grid-stack-item-content ui-draggable-handle\">\n            <div class=\"panel-heading\">\n                <table>\n                    <tbody>\n                        <tr class=\"tableheader\">\n                            <td><i style=\"font-size:35px; padding-right:5px; padding-left:5px\" class=\"fa fa fa-wrench \"><\/i><\/td>\n                            <td>\n                                <h3 class=\"panel-title\">Toolkit<\/h3><h5 class=\"panelSubTitle\">Utilities Toolkit<\/h5>\n                            <\/td>\n                        <\/tr>\n                        <tr><\/tr>\n                    <\/tbody>\n                <\/table>\n            <\/div>\n            <div id=\"content_RB9Buttons\" style=\"display:block; width: 100%;padding:0px;\" class=\"ifNoDataInWidget\">\n<\/div>\n        <\/div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: none;\"><\/div>\n    <\/div>");
-    
-    //$("#content_RB9Buttons").append("<span class=\"txtalignCenter\"><a id=\"rb9ButtonGetTTWeek\">Get Timetable (This Week)<\/a><\/span>");
-    //$("#content_RB9Buttons").append("<br /><a onclick=\"alert(userGuidingUserId.split('$')[0]);\">Get User ID</a>");
-    
-    appendUtilButton("rb9ButtonGetTTWeek", "Get Timetable (This Week)");
-    appendUtilButton("rb9ButtonGetTTWeekNext", "Get Timetable (Next Week)");
-    appendUtilButton("rb9ButtonGetUserId", "Get User ID");
-
-    $("#rb9ButtonGetUserId").on("click", () => {
-        var userIdParts = userGuidingUserId.split("$");
-        var id_user = userIdParts[0];
-        var id_institution = userIdParts[1];
-        alert(`User ID: ${id_user}\nInstitution ID: ${id_institution}`);
-    });
-
-    $("#rb9ButtonGetTTWeek").on("click", () => {
-        var now = new Date();
-        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
-        var lastSunday = new Date(today.setDate(today.getDate()-today.getDay()));
-        var nextSaturday = new Date(lastSunday).setDate(lastSunday.getDate() + 6);
-        var url = "https://vle.bromcomcloud.com/Timetable/GetTimeTable?WeekStartDate=" + formatDate(lastSunday) + "&weekEndDate=" + formatDate(nextSaturday) + "&type=1&id=0";
-        $.ajax({url: url, method: "POST", dataType: "json"})
-            .done((data) => {
-            timetableToClipboardProcess(data);
+    if (window.location.href.endsWith("/Home/Dashboard")) {
+        console.log("[RB9] Page is Dashboard, injecting widget!");
+
+        $("#widgetsDahsboard .grid-stack")
+            .append("\n<div class=\"grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled\" id=\"gs_RB9Buttons\" data-color=\"danger\" data-gs-id=\"gs_RB9Buttons\" data-gs-x=\"8\" data-gs-y=\"2\" data-gs-width=\"4\" data-gs-height=\"2\" data-gs-no-resize=\"yes\">\n        <div class=\"panel panel-danger shadow grid-stack-item-content ui-draggable-handle\">\n            <div class=\"panel-heading\">\n                <table>\n                    <tbody>\n                        <tr class=\"tableheader\">\n                            <td><i style=\"font-size:35px; padding-right:5px; padding-left:5px\" class=\"fa fa fa-wrench \"><\/i><\/td>\n                            <td>\n                                <h3 class=\"panel-title\">Toolkit<\/h3><h5 class=\"panelSubTitle\">Utilities Toolkit<\/h5>\n                            <\/td>\n                        <\/tr>\n                        <tr><\/tr>\n                    <\/tbody>\n                <\/table>\n            <\/div>\n            <div id=\"content_RB9Buttons\" style=\"display:block; width: 100%;padding:0px;\" class=\"ifNoDataInWidget\">\n<\/div>\n        <\/div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: none;\"><\/div>\n    <\/div>");
+        
+        //$("#content_RB9Buttons").append("<span class=\"txtalignCenter\"><a id=\"rb9ButtonGetTTWeek\">Get Timetable (This Week)<\/a><\/span>");
+        //$("#content_RB9Buttons").append("<br /><a onclick=\"alert(userGuidingUserId.split('$')[0]);\">Get User ID</a>");
+        
+        appendUtilButton("rb9ButtonGetTTWeek", "Get Timetable (This Week)");
+        appendUtilButton("rb9ButtonGetTTWeekNext", "Get Timetable (Next Week)");
+        appendUtilButton("rb9ButtonGetUserId", "Get User ID");
+
+        $("#rb9ButtonGetUserId").on("click", () => {
+            var userIdParts = userGuidingUserId.split("$");
+            var id_user = userIdParts[0];
+            var id_institution = userIdParts[1];
+            alert(`User ID: ${id_user}\nInstitution ID: ${id_institution}`);
         });
-    });
-
-    $("#rb9ButtonGetTTWeekNext").on("click", () => {
-        var now = new Date();
-        var today = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 7); // Forward 1 week
-        var lastSunday = new Date(today.setDate(today.getDate()-today.getDay()));
-        var nextSaturday = new Date(lastSunday).setDate(lastSunday.getDate() + 6);
-        var url = "https://vle.bromcomcloud.com/Timetable/GetTimeTable?WeekStartDate=" + formatDate(lastSunday) + "&weekEndDate=" + formatDate(nextSaturday) + "&type=1&id=0";
-        $.ajax({url: url, method: "POST", dataType: "json"})
-            .done((data) => {
-            timetableToClipboardProcess(data);
+
+        $("#rb9ButtonGetTTWeek").on("click", () => {
+            var now = new Date();
+            var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
+            var lastSunday = new Date(today.setDate(today.getDate()-today.getDay()));
+            var nextSaturday = new Date(lastSunday).setDate(lastSunday.getDate() + 6);
+            var url = "https://vle.bromcomcloud.com/Timetable/GetTimeTable?WeekStartDate=" + formatDate(lastSunday) + "&weekEndDate=" + formatDate(nextSaturday) + "&type=1&id=0";
+            $.ajax({url: url, method: "POST", dataType: "json"})
+                .done((data) => {
+                timetableToClipboardProcess(data);
+            });
         });
-    });
+
+        $("#rb9ButtonGetTTWeekNext").on("click", () => {
+            var now = new Date();
+            var today = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 7); // Forward 1 week
+            var lastSunday = new Date(today.setDate(today.getDate()-today.getDay()));
+            var nextSaturday = new Date(lastSunday).setDate(lastSunday.getDate() + 6);
+            var url = "https://vle.bromcomcloud.com/Timetable/GetTimeTable?WeekStartDate=" + formatDate(lastSunday) + "&weekEndDate=" + formatDate(nextSaturday) + "&type=1&id=0";
+            $.ajax({url: url, method: "POST", dataType: "json"})
+                .done((data) => {
+                timetableToClipboardProcess(data);
+            });
+        });
+    }
 })();