diff --git a/CHANGELOG b/CHANGELOG
index a72b97aec8db045560fb87c347108888ef86e039..2d6b4e86d7862cf77a080e3193f55ae01a1bc6f7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,9 @@ TODO::
 LAST DONE:
 
 CHANGES:
+- ver. 0.20.026 - <b>2022.04.14</b> Fixed: 
+  - fixed DSP::TMorseTable::LoadFromFile
+  - DSP::TMorseTable::LoadFromFile and DSP::u::MORSEkey::LoadFromFile now read file based on full path to *.mct file
 - ver. 0.20.025 - <b>2022.04.14</b> Changed: 
   - removed "using namespace std"
   - fixed several Linux compatibility issues
diff --git a/matlab/Polish.mct b/matlab/Polish.mct
new file mode 100644
index 0000000000000000000000000000000000000000..7534b590b36209835fcf6a93d2d5f8a9f19501c9
Binary files /dev/null and b/matlab/Polish.mct differ
diff --git a/src/Main.cpp b/src/Main.cpp
index 58c7c569feadea75873f9eb9e83edc0a42f1ae69..7c01e03c359258873c2bf7f92a26a9489c93dde5 100644
--- a/src/Main.cpp
+++ b/src/Main.cpp
@@ -2,6 +2,8 @@
 
 #include <DSP_sockets.h>
 #include <DSP_lib.h>
+#include <DSP_modules_misc.h>
+
 //#include <DSP_AudioMixer.h>
 #include "Main.h"
 
@@ -2951,6 +2953,18 @@ int main(int argc, char*argv[])
   DSP::log.SetLogState(DSP::e::LogState::console | DSP::e::LogState::file);
   DSP::log.SetLogFileName("DSPElib_test_log.txt");
 
+  DSP::log << "test MORSEkey" << std::endl;
+  {
+    DSP::TMorseTable MorseTable;
+    MorseTable.LoadFromFile("../matlab/Polish.mct");
+
+    DSP::Clock_ptr MasterClock = DSP::Clock::CreateMasterClock();
+    DSP::u::MORSEkey morse_key(MasterClock);
+    morse_key.LoadCodeTable("../matlab/Polish.mct");
+
+    DSP::Clock::FreeClocks();
+  }
+
   #ifdef ALSA_support_H
     DSP::log << "test ALSA" << std::endl;
     test_ALSA();
diff --git a/src/cpp/DSP_modules_misc.cpp b/src/cpp/DSP_modules_misc.cpp
index b67ccfeccf638febbde5ce3dd565257da2b59b8f..bcbd42093c5bbb96375ceb23e17d592d736af621 100644
--- a/src/cpp/DSP_modules_misc.cpp
+++ b/src/cpp/DSP_modules_misc.cpp
@@ -22,7 +22,6 @@
 int DSP::TMorseTable::TablesNo=0;
 DSP::TMorseTable *DSP::TMorseTable::FirstTable=NULL;
 DSP::TMorseTable *DSP::TMorseTable::Current=NULL;
-const std::string &DSP::TMorseTable::BaseDirectory="./";
 
 DSP::TMorseTable::TMorseTable(void)
 {
@@ -431,7 +430,6 @@ uint32_t DSP::TMorseTable::Char2Number(char znak)
 void DSP::TMorseTable::Save2File(const std::string &Name)
 {
   #if _DEMO_ == 0
-    std::string Dir_FileName;
     unsigned char pomB;
     uint16_t pom;
     unsigned long ind;
@@ -439,11 +437,7 @@ void DSP::TMorseTable::Save2File(const std::string &Name)
 
     FileName = Name;
 
-    Dir_FileName = BaseDirectory;
-    Dir_FileName += "config/";
-    Dir_FileName += FileName;
-
-    plik = fopen(Dir_FileName.c_str(), "wb");
+    plik = fopen(FileName.c_str(), "wb");
 
     pomB=FontsEditEntriesNo;
     fwrite(&pomB, sizeof(unsigned char), 1, plik);
@@ -476,7 +470,6 @@ void DSP::TMorseTable::Save2File(const std::string &Name)
 
     fclose(plik);
 
-    Dir_FileName = "";
   #endif // _DEMO_ == 0
 }
 
@@ -484,7 +477,6 @@ void DSP::TMorseTable::Save2File(const std::string &Name)
 
 bool DSP::TMorseTable::LoadFromFile(const std::string &Name)
 {
-  std::string Dir_FileName;
   uint8_t IleFONT;
   uint8_t ver;
   FILE *plik;
@@ -499,11 +491,7 @@ bool DSP::TMorseTable::LoadFromFile(const std::string &Name)
   else
     TableDescription = Name;
 
-  Dir_FileName = BaseDirectory;
-  Dir_FileName += "config/";
-  Dir_FileName += FileName;
-
-  plik = fopen(Dir_FileName.c_str(), "rb");
+  plik = fopen(FileName.c_str(), "rb");
   if (plik == NULL)
     return false;
 
@@ -570,7 +558,7 @@ bool DSP::TMorseTable::LoadFromFile(const std::string &Name)
   {
     if (ind<MaxMorseCodeEntriesNumber)
     {
-      fread(MorseCode+ind, sizeof(uint16_t), 1, plik);
+      fread(MorseCode+ind, sizeof(uint32_t), 1, plik);
 
       fread(CharCode+ind, sizeof(char), 1, plik);
       switch(ver)
@@ -591,7 +579,6 @@ bool DSP::TMorseTable::LoadFromFile(const std::string &Name)
 
   fclose(plik);
 
-  Dir_FileName = "";
   return true;
 }
 
@@ -680,7 +667,6 @@ void DSP::TMorseTable::NewTable(void)
 {
   //TSearchRec F;
   TMorseTable *pom;
-  std::string Dir_FileName;
   int ind_;
 
   pom=FirstTable;
@@ -705,10 +691,6 @@ void DSP::TMorseTable::NewTable(void)
   Current->FileName = Current->TableDescription;
   Current->FileName += ".mct";
 
-  Dir_FileName = Current->BaseDirectory;
-  Dir_FileName += "config/";
-  Dir_FileName += Current->FileName;
-
   /*
   while (FindFirst(Dir_FileName, faAnyFile, F)==0)
   {
@@ -744,8 +726,6 @@ void DSP::TMorseTable::NewTable(void)
   }
   else
     SaveCurrent();
-
-  Dir_FileName = "";
 }
 
 void DSP::TMorseTable::SaveCurrent(void)
diff --git a/src/include/DSP_lib.h b/src/include/DSP_lib.h
index f508d7f996b35b76d014dd4f53af919216f54e04..ef40002c8d09889d477c5476e25ebc58bf5287d1 100644
--- a/src/include/DSP_lib.h
+++ b/src/include/DSP_lib.h
@@ -11,7 +11,7 @@
 
 #define DSP_VER_MAJOR 0
 #define DSP_VER_MINOR 20
-#define DSP_VER_BUILD 25 // !!! without zeroes before, else this will be treated as octal number
+#define DSP_VER_BUILD 26 // !!! without zeroes before, else this will be treated as octal number
 #define DSP_VER_YEAR  2023
 #define DSP_VER       DSP_VER_MAJOR.DSP_VER_MINOR.DSP_VER_BUILD
 
diff --git a/src/include/DSP_modules_misc.h b/src/include/DSP_modules_misc.h
index 553b42347ee4667b889c71c93d8cdf6a3718340d..ba9ccfeb637504601971574d302feddaa7fdda24 100644
--- a/src/include/DSP_modules_misc.h
+++ b/src/include/DSP_modules_misc.h
@@ -33,7 +33,6 @@ class DSP::TMorseTable
   private:
     static int TablesNo;
     static TMorseTable *FirstTable;
-    static const std::string &BaseDirectory;
 
     TMorseTable *NextTable;
 
@@ -45,6 +44,7 @@ class DSP::TMorseTable
     static TMorseTable *Current;
 
   public:
+    //! loads coding table from file *.mct, where Name if filename with full path
     bool LoadFromFile(const std::string &Name);
 
     std::string FontName[FontsEditEntriesNo];
@@ -154,6 +154,8 @@ class DSP::u::MORSEkey : public DSP::Source // , public DSP::Randomization
         float dash2dot_ratio = 3.0, float space2dot_ratio = 7.0);
 
     bool LoadCodeTable(const std::string &filename);
+    //! \TODO add possibilitu to add user table without using file
+    void SetTable(const TMorseTable &new_table);
 
     //! Changes manually current key state
     /*!