diff --git a/CHANGELOG b/CHANGELOG
index ecfda11d1032f8d4b982eed46c2cc8c21866b5d3..49eb12fb537c18c23d10453e48cc1b6c9960900e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -8,6 +8,9 @@ TODO::
 LAST DONE:
 
 CHANGES:
+- ver. 0.20.016 - <b>2022.03.23</b> Changed: 
+  - DSP::DOT_edge_colors: added separate colors table for edges which starts from blue color and then red.
+    In most multiedge blocks first edge is for real part (blue) and second for imaginary part (red).
 - ver. 0.20.015 - <b>2022.03.18</b> Changed: 
   - DSP::u::InputBuffer: added reset_buffer to WriteBuffer so buffer output will start from newly added data
 - ver. 0.20.014 - <b>2023.03.014/b> Changed: 
diff --git a/src/cpp/DSP_DOT.cpp b/src/cpp/DSP_DOT.cpp
index 5e7e4794389e7931b353a3e8e48e6eb46503595b..5c29b67c34143fb6b249bc36d19abb51aa0da7f8 100644
--- a/src/cpp/DSP_DOT.cpp
+++ b/src/cpp/DSP_DOT.cpp
@@ -19,6 +19,12 @@ const vector<string> DSP::DOT_colors =
     "chocolate4", "blueviolet", "deeppink1", "goldenrod1"
 };
 
+const vector<string> DSP::DOT_edge_colors =
+{
+    "royalblue2", "red", "green3", "turquoise2", "yellow3",
+    "chocolate4", "blueviolet", "deeppink1", "goldenrod1"
+};
+
 
 #ifdef __DEBUG__
   string DSP::u::Splitter::GetComponentNodeParams_DOTfile(void) {
@@ -56,7 +62,7 @@ const vector<string> DSP::DOT_colors =
     //ind2 = FindOutputIndex_by_InputIndex(ind2);
 
     if (ind2 <= DSP::MaxOutputIndex)
-      text_buffer << "[color=" << DOT_colors[ind2 % DOT_colors.size()] << "]";
+      text_buffer << "[color=" << DOT_edge_colors[ind2 % DOT_edge_colors.size()] << "]";
     else
       text_buffer << "[color=black]";
     return text_buffer.str();
@@ -374,7 +380,7 @@ string DSP::Component::GetComponentNodeParams_DOTfile(const string &leading_spac
 string DSP::Component::GetComponentEdgeParams_DOTfile(const unsigned int &output_index)
 {
   stringstream text_buffer;
-  text_buffer << "[color=" << DOT_colors[output_index % DOT_colors.size()] << "]";
+  text_buffer << "[color=" << DOT_edge_colors[output_index % DOT_edge_colors.size()] << "]";
   return text_buffer.str();
 }
 
@@ -759,7 +765,7 @@ void DSP::Component::ComponentToDOTfile(std::ofstream &dot_plik,
   string DSP::Macro::GetMacroEdgeParams_DOTfile(const unsigned int &output_index)
   {
     stringstream text_buffer;
-    text_buffer << "[color=" << DOT_colors[output_index % DOT_colors.size()] << "]";
+    text_buffer << "[color=" << DOT_edge_colors[output_index % DOT_edge_colors.size()] << "]";
     return text_buffer.str();
   }
 
diff --git a/src/include/DSP_DOT.h b/src/include/DSP_DOT.h
index 9a3aa1c39b594d30fff5d28e1b8055a09091179d..7299351243403a71c193752997f11927e792e9da 100644
--- a/src/include/DSP_DOT.h
+++ b/src/include/DSP_DOT.h
@@ -15,6 +15,7 @@
 namespace DSP {
        //! DOT colors table
        extern const std::vector<std::string> DOT_colors;
+       extern const std::vector<std::string> DOT_edge_colors;
        
        //! DSPElib sub-namespace for enums definitions
        namespace e {
diff --git a/src/include/DSP_lib.h b/src/include/DSP_lib.h
index 3f841eb2405388588790312745386fecff9b38b5..080d14a4d399eb6928ec4c3355265fb692c82113 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 15 // !!! without zeroes before, else this will be treated as octal number
+#define DSP_VER_BUILD 16 // !!! 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.h b/src/include/DSP_modules.h
index 2e0dd13f74a9e157058ce0e408814660ecd33183..305ee04cf5c8409cb9022455e6073f1e4ae27bec 100644
--- a/src/include/DSP_modules.h
+++ b/src/include/DSP_modules.h
@@ -727,6 +727,7 @@ class DSP::name
 #ifdef __DEBUG__
   namespace DSP {
     extern const vector<string> DOT_colors;
+    extern const vector<string> DOT_edge_colors;
   }
 #endif