diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5e4e624951e499268d9eb4bf62f0dd0c73bb4c8f
--- /dev/null
+++ b/.idea/dbnavigator.xml
@@ -0,0 +1,517 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DBNavigator.Project.DataEditorManager">
+    <record-view-column-sorting-type value="BY_INDEX" />
+    <value-preview-text-wrapping value="false" />
+    <value-preview-pinned value="false" />
+  </component>
+  <component name="DBNavigator.Project.DatabaseConsoleManager">
+    <connection id="a5e69d11-9989-46c6-9a39-631e86083808">
+      <console name="Chinook" type="STANDARD" schema="" session="Main" />
+    </connection>
+  </component>
+  <component name="DBNavigator.Project.DatabaseEditorStateManager">
+    <last-used-providers />
+  </component>
+  <component name="DBNavigator.Project.DatabaseFileManager">
+    <open-files />
+  </component>
+  <component name="DBNavigator.Project.ObjectQuickFilterManager">
+    <last-used-operator value="EQUAL" />
+    <filters />
+  </component>
+  <component name="DBNavigator.Project.Settings">
+    <connections>
+      <connection id="a5e69d11-9989-46c6-9a39-631e86083808" active="true" signed="true">
+        <database>
+          <name value="Chinook" />
+          <description value="" />
+          <database-type value="SQLITE" />
+          <config-type value="BASIC" />
+          <database-version value="9999.0" />
+          <driver-source value="BUILTIN" />
+          <driver-library value="" />
+          <driver value="" />
+          <url-type value="FILE" />
+          <host value="" />
+          <port value="" />
+          <database value="" />
+          <files>
+            <file path="chinook.db" schema="main" />
+          </files>
+          <type value="NONE" />
+          <user value="" />
+          <deprecated-pwd value="" />
+        </database>
+        <properties>
+          <auto-commit value="false" />
+        </properties>
+        <ssh-settings>
+          <active value="false" />
+          <proxy-host value="" />
+          <proxy-port value="22" />
+          <proxy-user value="" />
+          <deprecated-proxy-pwd value="" />
+          <auth-type value="PASSWORD" />
+          <key-file value="" />
+          <key-passphrase value="" />
+        </ssh-settings>
+        <ssl-settings>
+          <active value="false" />
+          <certificate-authority-file value="" />
+          <client-certificate-file value="" />
+          <client-key-file value="" />
+        </ssl-settings>
+        <details>
+          <charset value="UTF-8" />
+          <session-management value="true" />
+          <ddl-file-binding value="true" />
+          <database-logging value="true" />
+          <connect-automatically value="true" />
+          <restore-workspace value="true" />
+          <restore-workspace-deep value="false" />
+          <environment-type value="default" />
+          <connectivity-timeout value="10" />
+          <idle-time-to-disconnect value="30" />
+          <idle-time-to-disconnect-pool value="5" />
+          <credential-expiry-time value="10" />
+          <max-connection-pool-size value="7" />
+          <alternative-statement-delimiter value="" />
+        </details>
+        <object-filters hide-empty-schemas="false" hide-pseudo-columns="false">
+          <object-type-filter>
+            <object-type name="SCHEMA" enabled="true" />
+            <object-type name="USER" enabled="true" />
+            <object-type name="ROLE" enabled="true" />
+            <object-type name="PRIVILEGE" enabled="true" />
+            <object-type name="CHARSET" enabled="true" />
+            <object-type name="TABLE" enabled="true" />
+            <object-type name="VIEW" enabled="true" />
+            <object-type name="MATERIALIZED_VIEW" enabled="true" />
+            <object-type name="NESTED_TABLE" enabled="true" />
+            <object-type name="COLUMN" enabled="true" />
+            <object-type name="INDEX" enabled="true" />
+            <object-type name="CONSTRAINT" enabled="true" />
+            <object-type name="DATASET_TRIGGER" enabled="true" />
+            <object-type name="DATABASE_TRIGGER" enabled="true" />
+            <object-type name="SYNONYM" enabled="true" />
+            <object-type name="SEQUENCE" enabled="true" />
+            <object-type name="PROCEDURE" enabled="true" />
+            <object-type name="FUNCTION" enabled="true" />
+            <object-type name="PACKAGE" enabled="true" />
+            <object-type name="TYPE" enabled="true" />
+            <object-type name="TYPE_ATTRIBUTE" enabled="true" />
+            <object-type name="ARGUMENT" enabled="true" />
+            <object-type name="DIMENSION" enabled="true" />
+            <object-type name="CLUSTER" enabled="true" />
+            <object-type name="DBLINK" enabled="true" />
+          </object-type-filter>
+          <object-name-filters />
+        </object-filters>
+      </connection>
+    </connections>
+    <browser-settings>
+      <general>
+        <display-mode value="TABBED" />
+        <navigation-history-size value="100" />
+        <show-object-details value="false" />
+      </general>
+      <filters>
+        <object-type-filter>
+          <object-type name="SCHEMA" enabled="true" />
+          <object-type name="USER" enabled="true" />
+          <object-type name="ROLE" enabled="true" />
+          <object-type name="PRIVILEGE" enabled="true" />
+          <object-type name="CHARSET" enabled="true" />
+          <object-type name="TABLE" enabled="true" />
+          <object-type name="VIEW" enabled="true" />
+          <object-type name="MATERIALIZED_VIEW" enabled="true" />
+          <object-type name="NESTED_TABLE" enabled="true" />
+          <object-type name="COLUMN" enabled="true" />
+          <object-type name="INDEX" enabled="true" />
+          <object-type name="CONSTRAINT" enabled="true" />
+          <object-type name="DATASET_TRIGGER" enabled="true" />
+          <object-type name="DATABASE_TRIGGER" enabled="true" />
+          <object-type name="SYNONYM" enabled="true" />
+          <object-type name="SEQUENCE" enabled="true" />
+          <object-type name="PROCEDURE" enabled="true" />
+          <object-type name="FUNCTION" enabled="true" />
+          <object-type name="PACKAGE" enabled="true" />
+          <object-type name="TYPE" enabled="true" />
+          <object-type name="TYPE_ATTRIBUTE" enabled="true" />
+          <object-type name="ARGUMENT" enabled="true" />
+          <object-type name="DIMENSION" enabled="true" />
+          <object-type name="CLUSTER" enabled="true" />
+          <object-type name="DBLINK" enabled="true" />
+        </object-type-filter>
+      </filters>
+      <sorting>
+        <object-type name="COLUMN" sorting-type="NAME" />
+        <object-type name="FUNCTION" sorting-type="NAME" />
+        <object-type name="PROCEDURE" sorting-type="NAME" />
+        <object-type name="ARGUMENT" sorting-type="POSITION" />
+        <object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
+      </sorting>
+      <default-editors>
+        <object-type name="VIEW" editor-type="SELECTION" />
+        <object-type name="PACKAGE" editor-type="SELECTION" />
+        <object-type name="TYPE" editor-type="SELECTION" />
+      </default-editors>
+    </browser-settings>
+    <navigation-settings>
+      <lookup-filters>
+        <lookup-objects>
+          <object-type name="SCHEMA" enabled="true" />
+          <object-type name="USER" enabled="false" />
+          <object-type name="ROLE" enabled="false" />
+          <object-type name="PRIVILEGE" enabled="false" />
+          <object-type name="CHARSET" enabled="false" />
+          <object-type name="TABLE" enabled="true" />
+          <object-type name="VIEW" enabled="true" />
+          <object-type name="MATERIALIZED VIEW" enabled="true" />
+          <object-type name="INDEX" enabled="true" />
+          <object-type name="CONSTRAINT" enabled="true" />
+          <object-type name="DATASET TRIGGER" enabled="true" />
+          <object-type name="DATABASE TRIGGER" enabled="true" />
+          <object-type name="SYNONYM" enabled="false" />
+          <object-type name="SEQUENCE" enabled="true" />
+          <object-type name="PROCEDURE" enabled="true" />
+          <object-type name="FUNCTION" enabled="true" />
+          <object-type name="PACKAGE" enabled="true" />
+          <object-type name="TYPE" enabled="true" />
+          <object-type name="DIMENSION" enabled="false" />
+          <object-type name="CLUSTER" enabled="false" />
+          <object-type name="DBLINK" enabled="true" />
+        </lookup-objects>
+        <force-database-load value="false" />
+        <prompt-connection-selection value="true" />
+        <prompt-schema-selection value="true" />
+      </lookup-filters>
+    </navigation-settings>
+    <dataset-grid-settings>
+      <general>
+        <enable-zooming value="true" />
+        <enable-column-tooltip value="true" />
+      </general>
+      <sorting>
+        <nulls-first value="true" />
+        <max-sorting-columns value="4" />
+      </sorting>
+      <audit-columns>
+        <column-names value="" />
+        <visible value="true" />
+        <editable value="false" />
+      </audit-columns>
+    </dataset-grid-settings>
+    <dataset-editor-settings>
+      <text-editor-popup>
+        <active value="false" />
+        <active-if-empty value="false" />
+        <data-length-threshold value="100" />
+        <popup-delay value="1000" />
+      </text-editor-popup>
+      <values-actions-popup>
+        <show-popup-button value="true" />
+        <element-count-threshold value="1000" />
+        <data-length-threshold value="250" />
+      </values-actions-popup>
+      <general>
+        <fetch-block-size value="100" />
+        <fetch-timeout value="30" />
+        <trim-whitespaces value="true" />
+        <convert-empty-strings-to-null value="true" />
+        <select-content-on-cell-edit value="true" />
+        <large-value-preview-active value="true" />
+      </general>
+      <filters>
+        <prompt-filter-dialog value="true" />
+        <default-filter-type value="BASIC" />
+      </filters>
+      <qualified-text-editor text-length-threshold="300">
+        <content-types>
+          <content-type name="Text" enabled="true" />
+          <content-type name="Properties" enabled="true" />
+          <content-type name="XML" enabled="true" />
+          <content-type name="DTD" enabled="true" />
+          <content-type name="HTML" enabled="true" />
+          <content-type name="XHTML" enabled="true" />
+          <content-type name="CSS" enabled="true" />
+          <content-type name="Java" enabled="true" />
+          <content-type name="SQL" enabled="true" />
+          <content-type name="PL/SQL" enabled="true" />
+          <content-type name="JavaScript" enabled="true" />
+          <content-type name="JSON" enabled="true" />
+          <content-type name="JSON5" enabled="true" />
+          <content-type name="JSP" enabled="true" />
+          <content-type name="JSPx" enabled="true" />
+          <content-type name="Groovy" enabled="true" />
+          <content-type name="FTL" enabled="true" />
+          <content-type name="VTL" enabled="true" />
+          <content-type name="AIDL" enabled="true" />
+          <content-type name="YAML" enabled="true" />
+          <content-type name="Manifest" enabled="true" />
+        </content-types>
+      </qualified-text-editor>
+      <record-navigation>
+        <navigation-target value="VIEWER" />
+      </record-navigation>
+    </dataset-editor-settings>
+    <code-editor-settings>
+      <general>
+        <show-object-navigation-gutter value="false" />
+        <show-spec-declaration-navigation-gutter value="true" />
+        <enable-spellchecking value="true" />
+        <enable-reference-spellchecking value="false" />
+      </general>
+      <confirmations>
+        <save-changes value="false" />
+        <revert-changes value="true" />
+      </confirmations>
+    </code-editor-settings>
+    <code-completion-settings>
+      <filters>
+        <basic-filter>
+          <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
+          <filter-element type="RESERVED_WORD" id="function" selected="true" />
+          <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
+          <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
+          <filter-element type="RESERVED_WORD" id="exception" selected="true" />
+          <filter-element type="OBJECT" id="schema" selected="true" />
+          <filter-element type="OBJECT" id="role" selected="true" />
+          <filter-element type="OBJECT" id="user" selected="true" />
+          <filter-element type="OBJECT" id="privilege" selected="true" />
+          <user-schema>
+            <filter-element type="OBJECT" id="table" selected="true" />
+            <filter-element type="OBJECT" id="view" selected="true" />
+            <filter-element type="OBJECT" id="materialized view" selected="true" />
+            <filter-element type="OBJECT" id="index" selected="true" />
+            <filter-element type="OBJECT" id="constraint" selected="true" />
+            <filter-element type="OBJECT" id="trigger" selected="true" />
+            <filter-element type="OBJECT" id="synonym" selected="false" />
+            <filter-element type="OBJECT" id="sequence" selected="true" />
+            <filter-element type="OBJECT" id="procedure" selected="true" />
+            <filter-element type="OBJECT" id="function" selected="true" />
+            <filter-element type="OBJECT" id="package" selected="true" />
+            <filter-element type="OBJECT" id="type" selected="true" />
+            <filter-element type="OBJECT" id="dimension" selected="true" />
+            <filter-element type="OBJECT" id="cluster" selected="true" />
+            <filter-element type="OBJECT" id="dblink" selected="true" />
+          </user-schema>
+          <public-schema>
+            <filter-element type="OBJECT" id="table" selected="false" />
+            <filter-element type="OBJECT" id="view" selected="false" />
+            <filter-element type="OBJECT" id="materialized view" selected="false" />
+            <filter-element type="OBJECT" id="index" selected="false" />
+            <filter-element type="OBJECT" id="constraint" selected="false" />
+            <filter-element type="OBJECT" id="trigger" selected="false" />
+            <filter-element type="OBJECT" id="synonym" selected="false" />
+            <filter-element type="OBJECT" id="sequence" selected="false" />
+            <filter-element type="OBJECT" id="procedure" selected="false" />
+            <filter-element type="OBJECT" id="function" selected="false" />
+            <filter-element type="OBJECT" id="package" selected="false" />
+            <filter-element type="OBJECT" id="type" selected="false" />
+            <filter-element type="OBJECT" id="dimension" selected="false" />
+            <filter-element type="OBJECT" id="cluster" selected="false" />
+            <filter-element type="OBJECT" id="dblink" selected="false" />
+          </public-schema>
+          <any-schema>
+            <filter-element type="OBJECT" id="table" selected="true" />
+            <filter-element type="OBJECT" id="view" selected="true" />
+            <filter-element type="OBJECT" id="materialized view" selected="true" />
+            <filter-element type="OBJECT" id="index" selected="true" />
+            <filter-element type="OBJECT" id="constraint" selected="true" />
+            <filter-element type="OBJECT" id="trigger" selected="true" />
+            <filter-element type="OBJECT" id="synonym" selected="true" />
+            <filter-element type="OBJECT" id="sequence" selected="true" />
+            <filter-element type="OBJECT" id="procedure" selected="true" />
+            <filter-element type="OBJECT" id="function" selected="true" />
+            <filter-element type="OBJECT" id="package" selected="true" />
+            <filter-element type="OBJECT" id="type" selected="true" />
+            <filter-element type="OBJECT" id="dimension" selected="true" />
+            <filter-element type="OBJECT" id="cluster" selected="true" />
+            <filter-element type="OBJECT" id="dblink" selected="true" />
+          </any-schema>
+        </basic-filter>
+        <extended-filter>
+          <filter-element type="RESERVED_WORD" id="keyword" selected="true" />
+          <filter-element type="RESERVED_WORD" id="function" selected="true" />
+          <filter-element type="RESERVED_WORD" id="parameter" selected="true" />
+          <filter-element type="RESERVED_WORD" id="datatype" selected="true" />
+          <filter-element type="RESERVED_WORD" id="exception" selected="true" />
+          <filter-element type="OBJECT" id="schema" selected="true" />
+          <filter-element type="OBJECT" id="user" selected="true" />
+          <filter-element type="OBJECT" id="role" selected="true" />
+          <filter-element type="OBJECT" id="privilege" selected="true" />
+          <user-schema>
+            <filter-element type="OBJECT" id="table" selected="true" />
+            <filter-element type="OBJECT" id="view" selected="true" />
+            <filter-element type="OBJECT" id="materialized view" selected="true" />
+            <filter-element type="OBJECT" id="index" selected="true" />
+            <filter-element type="OBJECT" id="constraint" selected="true" />
+            <filter-element type="OBJECT" id="trigger" selected="true" />
+            <filter-element type="OBJECT" id="synonym" selected="true" />
+            <filter-element type="OBJECT" id="sequence" selected="true" />
+            <filter-element type="OBJECT" id="procedure" selected="true" />
+            <filter-element type="OBJECT" id="function" selected="true" />
+            <filter-element type="OBJECT" id="package" selected="true" />
+            <filter-element type="OBJECT" id="type" selected="true" />
+            <filter-element type="OBJECT" id="dimension" selected="true" />
+            <filter-element type="OBJECT" id="cluster" selected="true" />
+            <filter-element type="OBJECT" id="dblink" selected="true" />
+          </user-schema>
+          <public-schema>
+            <filter-element type="OBJECT" id="table" selected="true" />
+            <filter-element type="OBJECT" id="view" selected="true" />
+            <filter-element type="OBJECT" id="materialized view" selected="true" />
+            <filter-element type="OBJECT" id="index" selected="true" />
+            <filter-element type="OBJECT" id="constraint" selected="true" />
+            <filter-element type="OBJECT" id="trigger" selected="true" />
+            <filter-element type="OBJECT" id="synonym" selected="true" />
+            <filter-element type="OBJECT" id="sequence" selected="true" />
+            <filter-element type="OBJECT" id="procedure" selected="true" />
+            <filter-element type="OBJECT" id="function" selected="true" />
+            <filter-element type="OBJECT" id="package" selected="true" />
+            <filter-element type="OBJECT" id="type" selected="true" />
+            <filter-element type="OBJECT" id="dimension" selected="true" />
+            <filter-element type="OBJECT" id="cluster" selected="true" />
+            <filter-element type="OBJECT" id="dblink" selected="true" />
+          </public-schema>
+          <any-schema>
+            <filter-element type="OBJECT" id="table" selected="true" />
+            <filter-element type="OBJECT" id="view" selected="true" />
+            <filter-element type="OBJECT" id="materialized view" selected="true" />
+            <filter-element type="OBJECT" id="index" selected="true" />
+            <filter-element type="OBJECT" id="constraint" selected="true" />
+            <filter-element type="OBJECT" id="trigger" selected="true" />
+            <filter-element type="OBJECT" id="synonym" selected="true" />
+            <filter-element type="OBJECT" id="sequence" selected="true" />
+            <filter-element type="OBJECT" id="procedure" selected="true" />
+            <filter-element type="OBJECT" id="function" selected="true" />
+            <filter-element type="OBJECT" id="package" selected="true" />
+            <filter-element type="OBJECT" id="type" selected="true" />
+            <filter-element type="OBJECT" id="dimension" selected="true" />
+            <filter-element type="OBJECT" id="cluster" selected="true" />
+            <filter-element type="OBJECT" id="dblink" selected="true" />
+          </any-schema>
+        </extended-filter>
+      </filters>
+      <sorting enabled="true">
+        <sorting-element type="RESERVED_WORD" id="keyword" />
+        <sorting-element type="RESERVED_WORD" id="datatype" />
+        <sorting-element type="OBJECT" id="column" />
+        <sorting-element type="OBJECT" id="table" />
+        <sorting-element type="OBJECT" id="view" />
+        <sorting-element type="OBJECT" id="materialized view" />
+        <sorting-element type="OBJECT" id="index" />
+        <sorting-element type="OBJECT" id="constraint" />
+        <sorting-element type="OBJECT" id="trigger" />
+        <sorting-element type="OBJECT" id="synonym" />
+        <sorting-element type="OBJECT" id="sequence" />
+        <sorting-element type="OBJECT" id="procedure" />
+        <sorting-element type="OBJECT" id="function" />
+        <sorting-element type="OBJECT" id="package" />
+        <sorting-element type="OBJECT" id="type" />
+        <sorting-element type="OBJECT" id="dimension" />
+        <sorting-element type="OBJECT" id="cluster" />
+        <sorting-element type="OBJECT" id="dblink" />
+        <sorting-element type="OBJECT" id="schema" />
+        <sorting-element type="OBJECT" id="role" />
+        <sorting-element type="OBJECT" id="user" />
+        <sorting-element type="RESERVED_WORD" id="function" />
+        <sorting-element type="RESERVED_WORD" id="parameter" />
+      </sorting>
+      <format>
+        <enforce-code-style-case value="true" />
+      </format>
+    </code-completion-settings>
+    <execution-engine-settings>
+      <statement-execution>
+        <fetch-block-size value="100" />
+        <execution-timeout value="20" />
+        <debug-execution-timeout value="600" />
+        <focus-result value="false" />
+        <prompt-execution value="false" />
+      </statement-execution>
+      <script-execution>
+        <command-line-interfaces />
+        <execution-timeout value="300" />
+      </script-execution>
+      <method-execution>
+        <execution-timeout value="30" />
+        <debug-execution-timeout value="600" />
+        <parameter-history-size value="10" />
+      </method-execution>
+    </execution-engine-settings>
+    <operation-settings>
+      <transactions>
+        <uncommitted-changes>
+          <on-project-close value="ASK" />
+          <on-disconnect value="ASK" />
+          <on-autocommit-toggle value="ASK" />
+        </uncommitted-changes>
+        <multiple-uncommitted-changes>
+          <on-commit value="ASK" />
+          <on-rollback value="ASK" />
+        </multiple-uncommitted-changes>
+      </transactions>
+      <session-browser>
+        <disconnect-session value="ASK" />
+        <kill-session value="ASK" />
+        <reload-on-filter-change value="false" />
+      </session-browser>
+      <compiler>
+        <compile-type value="KEEP" />
+        <compile-dependencies value="ASK" />
+        <always-show-controls value="false" />
+      </compiler>
+      <debugger>
+        <debugger-type value="ASK" />
+        <use-generic-runners value="true" />
+      </debugger>
+    </operation-settings>
+    <ddl-file-settings>
+      <extensions>
+        <mapping file-type-id="VIEW" extensions="vw" />
+        <mapping file-type-id="TRIGGER" extensions="trg" />
+        <mapping file-type-id="PROCEDURE" extensions="prc" />
+        <mapping file-type-id="FUNCTION" extensions="fnc" />
+        <mapping file-type-id="PACKAGE" extensions="pkg" />
+        <mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
+        <mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
+        <mapping file-type-id="TYPE" extensions="tpe" />
+        <mapping file-type-id="TYPE_SPEC" extensions="tps" />
+        <mapping file-type-id="TYPE_BODY" extensions="tpb" />
+      </extensions>
+      <general>
+        <lookup-ddl-files value="true" />
+        <create-ddl-files value="false" />
+        <synchronize-ddl-files value="true" />
+        <use-qualified-names value="false" />
+        <make-scripts-rerunnable value="true" />
+      </general>
+    </ddl-file-settings>
+    <general-settings>
+      <regional-settings>
+        <date-format value="MEDIUM" />
+        <number-format value="UNGROUPED" />
+        <locale value="SYSTEM_DEFAULT" />
+        <use-custom-formats value="false" />
+      </regional-settings>
+      <environment>
+        <environment-types>
+          <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
+          <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
+          <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
+          <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
+        </environment-types>
+        <visibility-settings>
+          <connection-tabs value="true" />
+          <dialog-headers value="true" />
+          <object-editor-tabs value="true" />
+          <script-editor-tabs value="false" />
+          <execution-result-tabs value="true" />
+        </visibility-settings>
+      </environment>
+    </general-settings>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index d825ad6c20b5b4a90ba23cfe17c3a6c55775a21f..742802af0bb4192ecb63ae552c4cf3322d879517 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -13,7 +13,6 @@
             <option value="$PROJECT_DIR$/app" />
             <option value="$PROJECT_DIR$/buildSrc" />
             <option value="$PROJECT_DIR$/console" />
-            <option value="$PROJECT_DIR$/list" />
             <option value="$PROJECT_DIR$/utilities" />
           </set>
         </option>
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 7e340a776a6a2b978d333a4d2815fa12ccacbd91..568bea16e29e4d31c02a8e1576e7fb23830a84ed 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="KotlinJpsPluginSettings">
-    <option name="version" value="1.6.21" />
+    <option name="version" value="1.6.20" />
   </component>
 </project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 58784cb31c8456051a7c8f34b800f30e88bec72c..f471db5a70dfe8b579890bbd44a3263824bde797 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,4 +8,4 @@
   <component name="SuppressKotlinCodeStyleNotification">
     <option name="disableForAll" value="true" />
   </component>
-</project>
\ No newline at end of file
+</project>
diff --git a/app/build.gradle b/app/build.gradle
index 840aa75f42249103a31becad6046c1888ab19a28..e291f901ef3e674547a00ea8977ea582e634a405 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,9 +4,20 @@
 
 plugins {
     id 'notes.multi.kotlin-application-conventions'
+    id 'notes.multi.kotlin-library-conventions'
+    id 'application'
+    id 'org.jetbrains.kotlin.jvm'
+    id 'org.openjfx.javafxplugin' version '0.0.13'
+}
+
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(17)
+    }
 }
 
 dependencies {
+    implementation group: 'org.fxmisc.richtext', name: 'richtextfx', version: '0.11.0'
     implementation 'org.apache.commons:commons-text'
     implementation project(':utilities')
     testImplementation 'org.jetbrains.kotlin:kotlin-test'
@@ -17,6 +28,11 @@ application {
     mainClass = 'notes.multi.app.AppKt'
 }
 
+javafx {
+    version = '18.0.2'
+    modules = ['javafx.controls', 'javafx.graphics', 'javafx.web']
+}
+
 test {
     useJUnitPlatform()
 }
diff --git a/app/src/main/kotlin/notes/multi/app/App.kt b/app/src/main/kotlin/notes/multi/app/App.kt
index 9d9016fffc7c2e54d5ae00b975a616f45dc6f35a..4fdf0891b43b35528680670ee2c82bafa1429231 100644
--- a/app/src/main/kotlin/notes/multi/app/App.kt
+++ b/app/src/main/kotlin/notes/multi/app/App.kt
@@ -3,12 +3,5 @@
  */
 package notes.multi.app
 
-import notes.multi.utilities.StringUtils
-
-import org.apache.commons.text.WordUtils
-
 fun main() {
-    val tokens = StringUtils.split(MessageUtils.getMessage())
-    val result = StringUtils.join(tokens)
-    println(WordUtils.capitalize(result))
 }
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index 2aa0c8482afc566c889590c21de58059004c5a99..71eb07496f744794cc543b32879b5ae744ab6eb7 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -14,5 +14,5 @@ repositories {
 }
 
 dependencies {
-    implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31'
+    implementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.20'
 }
diff --git a/console/build.gradle b/console/build.gradle
index c32e5dfcae2acbfa480e1943db2dbe92317bc277..60c19ab75f77ac4f5b792ca036d85300041fb46d 100644
--- a/console/build.gradle
+++ b/console/build.gradle
@@ -9,15 +9,32 @@ plugins {
     id 'org.openjfx.javafxplugin' version '0.0.13'
 }
 
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(17)
+    }
+}
+
 javafx {
     version = '18.0.2'
-    modules = ['javafx.controls', 'javafx.graphics']
+    modules = ['javafx.controls', 'javafx.graphics', 'javafx.web']
+}
+
+repositories {
+    mavenCentral()
 }
 
 dependencies {
     implementation 'org.apache.commons:commons-text'
     implementation project(':utilities')
     testImplementation 'org.jetbrains.kotlin:kotlin-test'
+    implementation 'org.xerial:sqlite-jdbc:3.30.1'
+
+    implementation("org.slf4j:slf4j-simple:1.6.1")
+
+    implementation("org.jetbrains.exposed:exposed-core:$exposedVersion")
+    implementation("org.jetbrains.exposed:exposed-dao:$exposedVersion")
+    implementation("org.jetbrains.exposed:exposed-jdbc:$exposedVersion")
 }
 
 application {
@@ -28,3 +45,9 @@ application {
 test {
     useJUnitPlatform()
 }
+
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(17)
+    }
+}
\ No newline at end of file
diff --git a/console/chinook.db b/console/chinook.db
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/console/gradle.properties b/console/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..a761c5c43b5ad0d4d1b42fcdb00d449e7e7dbbce
--- /dev/null
+++ b/console/gradle.properties
@@ -0,0 +1 @@
+exposedVersion=0.38.2
\ No newline at end of file
diff --git a/console/src/main/kotlin/notes/multi/console/Console.kt b/console/src/main/kotlin/notes/multi/console/Console.kt
index ac379c645634acbe614e482af458666db05babf1..0799589f72f219594d985365024451e40e5c3bed 100644
--- a/console/src/main/kotlin/notes/multi/console/Console.kt
+++ b/console/src/main/kotlin/notes/multi/console/Console.kt
@@ -7,8 +7,16 @@ import java.lang.IllegalArgumentException
 
 import notes.multi.utilities.TextWindow
 import javafx.application.Application
+import notes.multi.utilities.DatabaseOperations
+import notes.multi.utilities.DatabaseOperations.CRUD.getAllNotes
+import notes.multi.utilities.Note
+import org.jetbrains.exposed.dao.id.EntityID
+import org.jetbrains.exposed.sql.*
+import org.jetbrains.exposed.sql.transactions.transaction
 import kotlin.io.path.Path
 import java.io.File
+import java.time.LocalDate
+import java.time.LocalDateTime
 
 
 fun main(args: Array<String>) {
@@ -46,31 +54,71 @@ fun main(args: Array<String>) {
         +-------------------------------------------------------------------------------------+
     """.trimIndent()
             )
+            Database.connect("jdbc:sqlite:test.db")
+
+            transaction {
+                // print sql to std-out
+                // addLogger(StdOutSqlLogger)
+
+                // create a table that reflects the Cities class structure
+                SchemaUtils.create(DatabaseOperations.Notes)
+
+                val query = DatabaseOperations.Notes.selectAll()
+                query.forEach {
+                   println(it[DatabaseOperations.Notes.id].toString() + " | " + it[DatabaseOperations.Notes.title])
+                }
+            }
         } else {
             if (args.size < 2) {
 
-                /**
-                 * File Path (can be relative or absolute)
-                 */
-                val filePathArg = args[0]
+                // /**
+                //  * File Path (can be relative or absolute)
+                //  */
+                // val filePathArg = args[0]
+                //
+                // /**
+                //  * Title of the file
+                //  */
+                // val fileTitle = Path(filePathArg).fileName
+                //
+                // /**
+                //  * Location of the file as text
+                //  */
+                // val fileLocation = Path(filePathArg).parent ?: System.getProperty("user.dir")
+                //
+                // if (!File(fileLocation.toString()).isDirectory) throw IllegalArgumentException("[ERROR]: Directory does not exist!")
 
-                /**
-                 * Title of the file
-                 */
-                val fileTitle = Path(filePathArg).fileName
+                // Regex Check for a specific argument format:
+                // ConsoleUtils.verifyFilename(fileTitle.toString(), Regex("^.*[.]([Mm][Dd]|[Tt][Xx][Tt])$"))
 
-                /**
-                 * Location of the file as text
-                 */
-                val fileLocation = Path(filePathArg).parent ?: System.getProperty("user.dir")
-                if (!File(fileLocation.toString()).isDirectory) throw IllegalArgumentException("[ERROR]: Directory does not exist!")
+                val fileTitle = args[0]
+                var fileText: String = ""
+                    Database.connect("jdbc:sqlite:test.db")
 
-                // Regex Check for a specific argument format:
-                ConsoleUtils.verifyFilename(fileTitle.toString(), Regex("^.*[.]([Mm][Dd]|[Tt][Xx][Tt])$"))
+                var noteExists = false
+                var noteText: String? = ""
+                var noteId: String = "-1"
+
+                transaction {
+                    // print sql to std-out
+                    // addLogger(StdOutSqlLogger)
+
+                    // create a table that reflects the Cities class structure
+                    SchemaUtils.create(DatabaseOperations.Notes)
 
-                // Passing the location and title as params to TextWindow
-                Application.launch(TextWindow()::class.java, "--title=${fileTitle}", "--location=${fileLocation}")
 
+                    val query = DatabaseOperations.Notes.selectAll()
+                    query.forEach {
+                        if (it[DatabaseOperations.Notes.title] == fileTitle) {
+                            noteExists = true
+                            noteText = it[DatabaseOperations.Notes.text]
+                            noteId = it[DatabaseOperations.Notes.id].toString()
+                        }
+                    }
+                }
+
+                // Passing the location and title as params to TextWindow
+                Application.launch(TextWindow()::class.java, "--title=$fileTitle", "--text=$noteText", "--id=$noteId")
             } else {
                 throw IllegalArgumentException("[ERROR]: Wrong number of arguments provided!")
             }
diff --git a/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt b/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt
index c82975f9bc13d46389eadb34aadce7750b3095af..96d939a0727334a14a64c7a6e43784e1ae76bf96 100644
--- a/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt
+++ b/console/src/test/kotlin/notes/multi/app/ConsoleUtilsTest.kt
@@ -17,10 +17,7 @@ class ConsoleUtilsTest {
         var n = Note(
             title = "NeverGonnaGiveYouUp",
             text = StringBuffer(""),
-            author = "Rick Astley",
-            extension = "txt",
-            lastModified = LocalDateTime.now(),
-            location = "."
+            lastModified = LocalDateTime.now().toString(),
         )
 
 
diff --git a/console/test.db b/console/test.db
new file mode 100644
index 0000000000000000000000000000000000000000..9f2636cb42690853c06a9c00dc8639184e2ef377
Binary files /dev/null and b/console/test.db differ
diff --git a/console/test.txt b/console/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d48fee9b7262d50bf626c15165d11cee2184745b
--- /dev/null
+++ b/console/test.txt
@@ -0,0 +1 @@
+<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: &quot;&quot;;">Abhay Test! 123<br></span><p><span style="font-family: &quot;&quot;;">Hopefully this works! :D</span></p></p></body></html>
\ No newline at end of file
diff --git a/console/test/asdasd.txt b/console/test/asdasd.txt
new file mode 100644
index 0000000000000000000000000000000000000000..70a7416b25fe65127d78038704a7ec968ba8bb37
--- /dev/null
+++ b/console/test/asdasd.txt
@@ -0,0 +1 @@
+<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: &quot;&quot;;">ASasAS</span></p></body></html>
\ No newline at end of file
diff --git a/console/test/test.txt b/console/test/test.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9940c32f4b09c19edca63637b8ec91e04a1f211b
--- /dev/null
+++ b/console/test/test.txt
@@ -0,0 +1 @@
+<html dir="ltr"><head></head><body contenteditable="true"><p>al<span style="background-color: rgb(255, 0, 0); color: rgb(0, 0, 255); font-family: &quot;&quot;;">!</span></p><p><span style="color: rgb(0, 0, 255); font-family: &quot;&quot;; background-color: rgb(255, 0, 0);">aaaaaaa123123123123</span>haaaaaaaa!</p></body></html>
\ No newline at end of file
diff --git a/console/test/testver2.txt b/console/test/testver2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2eae37aae9ba9a6e1fb06998d9ee6971bb4508f0
--- /dev/null
+++ b/console/test/testver2.txt
@@ -0,0 +1 @@
+<html dir="ltr"><head></head><body contenteditable="true"><p><span style="font-family: &quot;&quot;;">Hello <span style="color: rgb(51, 77, 179);">my</span> <span style="background-color: rgb(26, 0, 104);">friedasdasdasd</span></span></p></body></html>
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e750102e09269a4ac558e10a6612998e5ca4c0f2..e1bef7e873c1f79108a6676ad60e4566ca1d1950 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/list/build.gradle b/list/build.gradle
deleted file mode 100644
index f739cf86f8b84486d0d228a2a337215b3bf16b02..0000000000000000000000000000000000000000
--- a/list/build.gradle
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- * This file was generated by the Gradle 'init' task.
- */
-
-plugins {
-    id 'notes.multi.kotlin-library-conventions'
-}
diff --git a/list/src/main/kotlin/notes/multi/list/LinkedList.kt b/list/src/main/kotlin/notes/multi/list/LinkedList.kt
deleted file mode 100644
index 3b55eb9bbdcf097ef280952f786f89c4471c8d2b..0000000000000000000000000000000000000000
--- a/list/src/main/kotlin/notes/multi/list/LinkedList.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle 'init' task.
- */
-package notes.multi.list
-
-class LinkedList {
-    private var head: Node? = null
-
-    fun add(element: String) {
-        val newNode = Node(element)
-
-        val it = tail(head)
-        if (it == null) {
-            head = newNode
-        } else {
-            it.next = newNode
-        }
-    }
-
-    private fun tail(head: Node?): Node? {
-        var it: Node?
-
-        it = head
-        while (it?.next != null) {
-            it = it.next
-        }
-
-        return it
-    }
-
-    fun remove(element: String): Boolean {
-        var result = false
-        var previousIt: Node? = null
-        var it: Node? = head
-        while (!result && it != null) {
-            if (0 == element.compareTo(it.data)) {
-                result = true
-                unlink(previousIt, it)
-                break
-            }
-            previousIt = it
-            it = it.next
-        }
-
-        return result
-    }
-
-    private fun unlink(previousIt: Node?, currentIt: Node) {
-        if (currentIt == head) {
-            head = currentIt.next
-        } else {
-            previousIt?.next = currentIt.next
-        }
-    }
-
-    fun size(): Int {
-        var size = 0
-
-        var it = head
-        while (it != null) {
-            ++size
-            it = it.next
-        }
-
-        return size
-    }
-
-    fun get(idx: Int): String {
-        var index = idx
-        var it = head
-        while (index > 0 && it != null) {
-            it = it.next
-            index--
-        }
-
-        if (it == null) {
-            throw IndexOutOfBoundsException("Index is out of range")
-        }
-
-        return it.data
-    }
-
-    private data class Node(val data: String) {
-        var next: Node? = null
-    }
-}
diff --git a/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt b/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt
deleted file mode 100644
index d252d07f6c110067d1bd3036e9b07fc815dba0dd..0000000000000000000000000000000000000000
--- a/list/src/test/kotlin/notes/multi/list/LinkedListTest.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle "init" task.
- */
-package notes.multi.list
-
-import org.junit.jupiter.api.Test
-
-import org.junit.jupiter.api.Assertions.*
-
-class LinkedListTest {
-    @Test fun testConstructor() {
-        val list = LinkedList()
-        assertEquals(0, list.size())
-    }
-
-    @Test fun testAdd() {
-        val list = LinkedList()
-
-        list.add("one")
-        assertEquals(1, list.size())
-        assertEquals("one", list.get(0))
-
-        list.add("two")
-        assertEquals(2, list.size())
-        assertEquals("two", list.get(1))
-    }
-
-    @Test fun testRemove() {
-        val list = LinkedList()
-
-        list.add("one")
-        list.add("two")
-        assertTrue(list.remove("one"))
-
-        assertEquals(1, list.size())
-        assertEquals("two", list.get(0))
-
-        assertTrue(list.remove("two"))
-        assertEquals(0, list.size())
-    }
-
-    @Test fun testRemoveMissing() {
-        val list = LinkedList()
-
-        list.add("one")
-        list.add("two")
-        assertFalse(list.remove("three"))
-        assertEquals(2, list.size())
-    }
-}
diff --git a/settings.gradle b/settings.gradle
index ec950590465023d2c78787058be62d6460463f58..335b53caf933daba3d86412ad6c2938424944d70 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -8,4 +8,4 @@
  */
 
 rootProject.name = 'notes-multi'
-include('app', 'list', 'utilities', 'console')
+include('app', 'utilities', 'console')
diff --git a/utilities/build.gradle b/utilities/build.gradle
index 12591b8a4fbeb35c1914f5f7e403b312f225720c..2bf145ba1f3c18bf1e04a667ffd1ebba3cd7d91b 100644
--- a/utilities/build.gradle
+++ b/utilities/build.gradle
@@ -9,16 +9,35 @@ plugins {
     id 'org.openjfx.javafxplugin' version '0.0.13'
 }
 
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(17)
+    }
+}
+
 javafx {
     version = '18.0.2'
-    modules = ['javafx.controls', 'javafx.graphics']
+    modules = ['javafx.controls', 'javafx.graphics', 'javafx.web']
+}
+
+repositories {
+    mavenCentral()
 }
 
 dependencies {
-    api project(':list')
     testImplementation 'org.jetbrains.kotlin:kotlin-test'
+
+    implementation("org.jetbrains.exposed:exposed-core:0.40.1")
+    implementation("org.jetbrains.exposed:exposed-dao:0.40.1")
+    implementation("org.jetbrains.exposed:exposed-jdbc:0.40.1")
 }
 
 test {
     useJUnitPlatform()
 }
+
+java {
+    toolchain {
+        languageVersion = JavaLanguageVersion.of(17)
+    }
+}
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt b/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0eb7b8c8131faac360896fffebf7381aa3f765fd
--- /dev/null
+++ b/utilities/src/main/kotlin/notes/multi/utilities/DatabaseOperations.kt
@@ -0,0 +1,90 @@
+package notes.multi.utilities
+
+import notes.multi.utilities.Note
+
+import org.jetbrains.exposed.dao.id.IntIdTable
+import org.jetbrains.exposed.sql.*
+import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
+import org.jetbrains.exposed.sql.transactions.transaction
+
+import java.sql.Connection
+import java.sql.DriverManager
+import java.sql.SQLException
+import java.time.LocalDate
+import java.time.LocalDateTime
+import kotlin.io.path.createTempDirectory
+
+class DatabaseOperations() {
+    object Notes : IntIdTable() {
+        val title: Column<String?> = varchar("title", 100).nullable()
+        val text = text("text", eagerLoading = true).nullable()
+        val dateCreated = varchar("dateCreated", 30)
+        val lastModified = varchar("lastModified", 30)
+    }
+
+    companion object CRUD {
+        fun addNote(note: Note) {
+            val newNote = Notes.insert {
+                it[Notes.title] = note.title
+                it[Notes.text] = note.text.toString()
+                it[Notes.dateCreated] = note.dateCreated
+                it[Notes.lastModified] = note.lastModified
+            } get Notes.id
+        }
+
+        fun getNote(id: Int): Note {
+            val tempNote = Note()
+
+            Notes.select { Notes.id eq id }.forEach {
+                tempNote.title = it[Notes.title]
+                tempNote.text = StringBuffer(it[Notes.text])
+                tempNote.dateCreated = it[Notes.dateCreated]
+                tempNote.lastModified = it[Notes.lastModified]
+            }
+
+            return tempNote
+        }
+
+        fun updateNote(id: Int, note: Note) {
+            Notes.update ({Notes.id eq id}) {
+                it[Notes.title] = note.title
+                it[Notes.text] = note.text.toString()
+                it[Notes.dateCreated] = note.dateCreated
+                it[Notes.lastModified] = note.lastModified
+            }
+        }
+
+        fun deleteNote(id: Int) {
+            Notes.deleteWhere { Notes.id eq id }
+            updateNoteId()
+        }
+
+        private fun updateNoteId() {
+            var id = 1
+            Notes.slice(Notes.id).selectAll().forEach() {
+                Notes.update ({Notes.id eq it[Notes.id]}) {
+                    it[Notes.id] = id
+                }
+                id += 1
+            }
+        }
+
+        fun getAllNotes(): MutableList<Note> {
+            var listOfNotes: MutableList<Note> = mutableListOf()
+
+            Notes.selectAll().forEach {
+                var tempNote = Note(it[Notes.title], StringBuffer(it[Notes.text]), it[Notes.dateCreated], it[Notes.lastModified])
+                listOfNotes.add(tempNote)
+            }
+            return listOfNotes
+        }
+    }
+
+
+//object Folder : IntIdTable() {
+//    val folderName = varchar("folderName", 100).nullable()
+//    val notes = arrayOf(Notes.id)
+//    val dateCreated = varchar("dateCreated", 30)
+//    val lastUpdated = varchar("lastUpdated", 30)
+//}
+}
\ No newline at end of file
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt
deleted file mode 100644
index 1aa4e0ca0a3d10f7743f88c371c96d7d8e3d0839..0000000000000000000000000000000000000000
--- a/utilities/src/main/kotlin/notes/multi/utilities/JoinUtils.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle 'init' task.
- */
-package notes.multi.utilities
-
-import notes.multi.list.LinkedList
-
-class JoinUtils {
-    companion object {
-        fun join(source: LinkedList): String {
-            val result = StringBuilder()
-            for (i in 0 until source.size()) {
-                if (result.isNotEmpty()) {
-                    result.append(" ")
-                }
-                result.append(source.get(i))
-            }
-
-            return result.toString()
-        }
-    }
-}
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/Note.kt b/utilities/src/main/kotlin/notes/multi/utilities/Note.kt
index a523006d96ae025bf285b838fddd3bd1be9e6876..4719680b1a0d5a708c528bb7d2de8547c1aa8bd5 100644
--- a/utilities/src/main/kotlin/notes/multi/utilities/Note.kt
+++ b/utilities/src/main/kotlin/notes/multi/utilities/Note.kt
@@ -13,13 +13,10 @@ import java.time.LocalDateTime
  * @param lastModified Last modification date of the note
  * @param location Location of the note
  */
-class Note(var title: String = "Untitled",
-           var text: StringBuffer = StringBuffer(""),
-           val author: String = "?", // User class?
-           var extension: String= "?", // necessary?
-           val dateCreated: LocalDate? = LocalDate.now(),
-           var lastModified: LocalDateTime? = LocalDateTime.now(),
-           var location: String? = null) { // path to the created file?
+class Note(var title: String? = "Untitled",
+           var text: StringBuffer? = StringBuffer(""),
+//           val author: String = "?", // User class?
+           var dateCreated: String = LocalDate.now().toString(),
+           var lastModified: String = LocalDateTime.now().toString()) {
     // update last modified date
-    // images?
 }
\ No newline at end of file
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt b/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt
index 55c0fde27fc18cead71821ae3cc663498604e5fc..07f1c8a51eee0bf9099d0092fc38efa831593cff 100644
--- a/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt
+++ b/utilities/src/main/kotlin/notes/multi/utilities/NoteTextWindow.kt
@@ -8,10 +8,21 @@ import javafx.scene.control.TextArea
 import javafx.scene.layout.VBox
 import javafx.scene.layout.AnchorPane
 import javafx.application.Platform
+import javafx.scene.Node
 import javafx.scene.control.Alert
 import javafx.scene.control.ButtonType
 import javafx.scene.input.KeyCode
+import javafx.scene.input.MouseDragEvent
+import javafx.scene.input.MouseEvent
 import javafx.scene.layout.Priority
+import javafx.scene.web.HTMLEditor
+import org.jetbrains.exposed.sql.Database
+import org.jetbrains.exposed.sql.SchemaUtils
+import org.jetbrains.exposed.sql.deleteWhere
+import org.jetbrains.exposed.sql.transactions.transaction
+import java.beans.EventHandler
+import java.time.LocalDate
+import java.time.LocalDateTime
 
 /**
  * - Displays a responsive `TextArea` in a window with the text of the file passed to the `Application.launch` function
@@ -41,13 +52,14 @@ class TextWindow(): Application() {
     }
 
     override fun start(stage: Stage) {
-        val path = paramsMap["location"]!!
-        val fileController = FileManager(path, paramsMap["title"]!!)
-        stage.title = paramsMap["title"]
-        val textarea = TextArea()
+        stage.setTitle(paramsMap["title"])
+        val textarea = HTMLEditor()
+        //textarea.setText(paramsMap["text"])
+        textarea.htmlText = paramsMap["text"]
+
+        //textarea.setWrapText(true)
+
 
-        textarea.text = fileController.openFile()
-        textarea.isWrapText = true
         val scroll = ScrollPane()
         val anchor = AnchorPane(textarea)
 
@@ -85,7 +97,33 @@ class TextWindow(): Application() {
                 val result = warning.showAndWait()
                 if (result.isPresent) {
                     when (result.get()) {
-                        ButtonType.OK -> fileController.writeFile(textarea.text)
+                        ButtonType.OK -> {
+                            // filecontroller.writeFile(textarea.htmlText)
+
+
+                            Database.connect("jdbc:sqlite:test.db")
+                            transaction {
+                                SchemaUtils.create(DatabaseOperations.Notes)
+                                var newNote = Note(paramsMap["title"], StringBuffer(textarea.htmlText),
+                                    LocalDate.now().toString(), LocalDateTime.now().toString())
+                                var updateId = paramsMap["id"]?.toInt()
+                                if (updateId !== null && updateId != -1) {
+                                    DatabaseOperations.updateNote(updateId, newNote)
+                                } else {
+                                    DatabaseOperations.addNote(newNote)
+                                }
+                            }
+
+                            //
+                            // Database.connect("jdbc:sqlite:test.db")
+                            // transaction {
+                            //     SchemaUtils.create(DatabaseOperations.Notes)
+                            //     var newNote = Note(paramsMap["title"], StringBuffer(textarea.htmlText),
+                            //         LocalDate.now().toString(), LocalDateTime.now().toString())
+                            //     DatabaseOperations.addNote(newNote)
+                            // }
+
+                        }
                     }
                 }
             } else if (event.code == KeyCode.D && controlPressed) {
@@ -95,8 +133,20 @@ class TextWindow(): Application() {
                 val result = warning.showAndWait()
                 if (result.isPresent) {
                     when (result.get()) {
-                        ButtonType.OK -> {fileController.deleteFile()
-                            Platform.exit()}
+                        ButtonType.OK -> {
+                            // filecontroller.deleteFile()
+
+                            Database.connect("jdbc:sqlite:test.db")
+                            transaction {
+                                SchemaUtils.create(DatabaseOperations.Notes)
+                                var deleteId = paramsMap["id"]?.toInt()
+                                if (deleteId !== null && deleteId != -1) {
+                                    DatabaseOperations.deleteNote(deleteId)
+                                }
+                            }
+
+                            Platform.exit()
+                        }
                     }
                 }
             } else if (event.code == KeyCode.W && controlPressed) {
@@ -121,6 +171,7 @@ class TextWindow(): Application() {
             if (controlPressed) {controlPressed = false}
         }
 
+
         stage.show()
     }
 }
\ No newline at end of file
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt
deleted file mode 100644
index 62c2af4e023ffa1612be6b6eb39964be49a1ce0e..0000000000000000000000000000000000000000
--- a/utilities/src/main/kotlin/notes/multi/utilities/SplitUtils.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle 'init' task.
- */
-package notes.multi.utilities
-
-import notes.multi.list.LinkedList
-
-class SplitUtils {
-    companion object {
-        fun split(source: String): LinkedList {
-            var lastFind = 0
-            val result = LinkedList()
-
-            var currentFind = source.indexOf(" ", lastFind)
-            while (currentFind != -1) {
-                var token = source.substring(lastFind)
-                if (currentFind != -1) {
-                    token = token.substring(0, currentFind - lastFind)
-                }
-
-                addIfValid(token, result)
-                lastFind = currentFind + 1
-                currentFind = source.indexOf(" ", lastFind)
-            }
-
-            val token = source.substring(lastFind)
-            addIfValid(token, result)
-
-            return result
-        }
-
-        private fun addIfValid(token: String, list: LinkedList) {
-            if (isTokenValid(token)) {
-                list.add(token)
-            }
-        }
-
-        private fun isTokenValid(token: String): Boolean {
-            return token.isNotEmpty()
-        }
-    }
-}
diff --git a/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt b/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt
deleted file mode 100644
index b0906b8b2eced0446b88c24a2f55b7266d3c4a29..0000000000000000000000000000000000000000
--- a/utilities/src/main/kotlin/notes/multi/utilities/StringUtils.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * This Kotlin source file was generated by the Gradle 'init' task.
- */
-package notes.multi.utilities
-
-import notes.multi.list.LinkedList
-
-class StringUtils {
-    companion object {
-        fun join(source: LinkedList): String {
-            return JoinUtils.join(source)
-        }
-
-        fun split(source: String): LinkedList {
-            return SplitUtils.split(source)
-        }
-    }
-}