diff --git a/CHANGELOG b/CHANGELOG
index 15a862b28e2b2a5d9311bc0ed971defc51654c97..d8c62eb1e6dc955474191633a9c7a77c7145fb76 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -29,8 +29,10 @@ TODO::
 LAST DONE:
 
 CHANGES:
-- ver. 0.20.035 <b>2023.11.28</b> Fixed:
-  - DSP::u::Switch - inputs were incorrectly defined as ouputs.
+- ver. 0.20.036 <b>2023.11.29</b> Fixed:
+  - DSP::u::Switch - inputs were incorrectly defined as outputs + fix in input processing procedure.
+  - DSP::Component::DefineStandardOutputs - Names for complex outputs corrected
+  - DSP::Block::DefineStandardInputs - Names for complex inputs corrected
 - ver. 0.20.033 <b>2023.11.11</b> Fixed:
   - DSP::u::OutputBuffer - added setting OutputBuffer inputs' clocks (SetBlockInputClock) as equal to ParentClock to allow clock mismatch check when buffers ParentClock dows not match the inputs' clocks. 
     - PROBLEM: the ParentClock match to InputClock is not checked for DSP::u::OutputBuffer which might lead user to not notice that expected NotificationClock is incorectly selected.
diff --git a/src/cpp/DSP_modules.cpp b/src/cpp/DSP_modules.cpp
index 2617dc68fe85394e57428e99e755112f9d3c5571..b20842f60ee4ddeac7a43dd39b61a8b3758ff3a4 100644
--- a/src/cpp/DSP_modules.cpp
+++ b/src/cpp/DSP_modules.cpp
@@ -5246,74 +5246,48 @@ void DSP::u::Switch::Select(unsigned int InputIndex, unsigned int OutputIndex)
     */
 }
 
+#define THIS ((DSP::u::Switch *)block)
 void DSP::u::Switch::InputExecute(INPUT_EXECUTE_ARGS)
 {
   UNUSED_DEBUG_ARGUMENT(Caller);
 
-  /* \todo_later Consider processing Output as soon as SelectedInputs are avaiable
+  /* \todo_later Consider processing Output as soon as SelectedInputs are available
    * \todo_later Consider storing only SelectedInputs, the rest could be ignored
    *
    */
-  unsigned int index;
+  THIS->NoOfInputsProcessed++;
+  if (InputNo==0)
+    THIS->State[InputNo]=value;
+  THIS->NoOfInputsProcessed++;
 
-/*
-  if (InputNo > LastInputInd)
-  {
-    if (InputNo == InputSelectionInd)
-      SelectedInputNo=((int)(floor(value)));
-    if (InputNo == OutputSelectionInd)
-      SelectedOutputNo=((int)(floor(value)));
-  }
-  else
-  {
-*/
-    index=InputNo / ((DSP::u::Switch *)block)->ValuesPerOutput;
-    ((DSP::u::Switch *)block)->State[index]=value;
-/*  } */
-  ((DSP::u::Switch *)block)->NoOfInputsProcessed++;
+  if (THIS->NoOfInputsProcessed < THIS->NoOfInputs)
+    return;
+  THIS->NoOfInputsProcessed=THIS->InitialNoOfInputsProcessed;
 
-  if (((DSP::u::Switch *)block)->NoOfInputsProcessed == ((DSP::u::Switch *)block)->NoOfInputs)
+  if ((THIS->SelectedInputNo != DSP::FO_NoInput) && (THIS->SelectedOutputNo != DSP::FO_NoOutput))
   {
-/*
-   if (SelectedInputNo > MaxSelectedInputNo)
-     SelectedInputNo = MaxSelectedInputNo;
-   if (SelectedOutputNo > MaxSelectedOutputNo)
-     SelectedOutputNo = MaxSelectedOutputNo;
-   if (SelectedInputNo < MinSelectedIndexNo)
-     SelectedInputNo = MinSelectedIndexNo;
-   if (SelectedOutputNo < MinSelectedIndexNo)
-     SelectedOutputNo = MinSelectedIndexNo;
-*/
-    if ((((DSP::u::Switch *)block)->SelectedInputNo != DSP::FO_NoInput) && (((DSP::u::Switch *)block)->SelectedOutputNo != DSP::FO_NoOutput))
+    if (THIS->ValuesPerOutput == 1)
     {
-      if (((DSP::u::Switch *)block)->ValuesPerOutput == 1)
-      {
-//        OutputBlocks[SelectedOutputNo]->
-//          Execute(OutputBlocks_InputNo[SelectedOutputNo], State[SelectedInputNo], this);
-        ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo]->EXECUTE_PTR(
-            ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo],
-            ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo],
-            ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo], block);
-      }
-      else // if (ValuesPerOutput == 2)
-      {
-//        OutputBlocks[SelectedOutputNo*2]->
-//          Execute(OutputBlocks_InputNo[SelectedOutputNo*2], State[SelectedInputNo*2], this);
-        ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2]->EXECUTE_PTR(
-            ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2],
-            ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo*2],
-            ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo*2], block);
-//        OutputBlocks[SelectedOutputNo*2+1]->
-//          Execute(OutputBlocks_InputNo[SelectedOutputNo*2+1], State[SelectedInputNo*2+1], this);
-        ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2+1]->EXECUTE_PTR(
-            ((DSP::u::Switch *)block)->OutputBlocks[((DSP::u::Switch *)block)->SelectedOutputNo*2+1],
-            ((DSP::u::Switch *)block)->OutputBlocks_InputNo[((DSP::u::Switch *)block)->SelectedOutputNo*2+1],
-            ((DSP::u::Switch *)block)->State[((DSP::u::Switch *)block)->SelectedInputNo*2+1], block);
-      }
-    } // otherwise simply ignore input (NO output)
-    ((DSP::u::Switch *)block)->NoOfInputsProcessed = ((DSP::u::Switch *)block)->InitialNoOfInputsProcessed;
-  }
+      THIS->OutputBlocks[THIS->SelectedOutputNo]->EXECUTE_PTR(
+          THIS->OutputBlocks[THIS->SelectedOutputNo],
+          THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo],
+          THIS->State[THIS->SelectedInputNo], block);
+    }
+    else // if (ValuesPerOutput == 2)
+    {
+      THIS->OutputBlocks[THIS->SelectedOutputNo*2]->EXECUTE_PTR(
+          THIS->OutputBlocks[THIS->SelectedOutputNo*2],
+          THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo*2],
+          THIS->State[THIS->SelectedInputNo*2], block);
+      THIS->OutputBlocks[THIS->SelectedOutputNo*2+1]->EXECUTE_PTR(
+          THIS->OutputBlocks[THIS->SelectedOutputNo*2+1],
+          THIS->OutputBlocks_InputNo[THIS->SelectedOutputNo*2+1],
+          THIS->State[THIS->SelectedInputNo*2+1], block);
+    }
+  } // otherwise simply ignore input (NO output)
+  THIS->NoOfInputsProcessed = THIS->InitialNoOfInputsProcessed;
 };
+#undef THIS
 
 /**************************************************/
 // Decimator without antialias filter
diff --git a/src/include/DSP_lib.h b/src/include/DSP_lib.h
index f97725f064634d60b4378a5063b1a4f8e0983155..48cdf965bd86841442c52116707c1448733e2de0 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 35 // !!! without zeroes before, else this will be treated as octal number
+#define DSP_VER_BUILD 36 // !!! 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