diff --git a/src/Network/NeuralNetwork.cpp b/src/Network/NeuralNetwork.cpp
index 445c736ac54db4a99f772b0c04e878bcd370cbf6..c9dd4fdbc3548d6e1cefd3cfb8f5a16d27c671d8 100644
--- a/src/Network/NeuralNetwork.cpp
+++ b/src/Network/NeuralNetwork.cpp
@@ -1007,6 +1007,21 @@ namespace lib4neuro {
     }
 
     FullyConnectedFFN::FullyConnectedFFN(std::vector<unsigned int>* neuron_numbers, NEURON_TYPE hidden_layer_neuron_type) : NeuralNetwork() {
+        std::vector<NEURON_TYPE> tmp;
+
+        for(auto i = 0; i < neuron_numbers->size(); i++) {
+            tmp.emplace_back(hidden_layer_neuron_type);
+        }
+
+        this->init(neuron_numbers, &tmp);
+    }
+
+    FullyConnectedFFN::FullyConnectedFFN(std::vector<unsigned int>* neuron_numbers,
+                                         std::vector<lib4neuro::NEURON_TYPE>* hidden_layer_neuron_types) : NeuralNetwork() {
+        this->init(neuron_numbers, hidden_layer_neuron_types);
+    }
+
+    void FullyConnectedFFN::init(std::vector<unsigned int>* neuron_numbers, std::vector<NEURON_TYPE>* hidden_layer_neuron_types) {
         if(neuron_numbers->size() < 2) {
             THROW_INVALID_ARGUMENT_ERROR("Parameter 'neuron_numbers' specifying numbers of neurons in network's layers "
                                          "doesn't specify input and output layers, which are compulsory!");
@@ -1065,9 +1080,10 @@ namespace lib4neuro {
                 size_t neuron_id;
 
                 /* Create new hidden neuron */
-                switch (hidden_layer_neuron_type) {
+                switch (hidden_layer_neuron_types->at(i-1)) {
                     case NEURON_TYPE::BINARY: {
                         neuron_id = this->add_neuron(new NeuronBinary, BIAS_TYPE::NEXT_BIAS);
+                        COUT_DEBUG("Added BINARY neuron." << std::endl);
                         break;
                     }
 
@@ -1078,11 +1094,13 @@ namespace lib4neuro {
 
                     case NEURON_TYPE::LINEAR: {
                         neuron_id = this->add_neuron(new NeuronLinear, BIAS_TYPE::NEXT_BIAS);
+                        COUT_DEBUG("Added LINEAR neuron." << std::endl);
                         break;
                     }
 
                     case NEURON_TYPE::LOGISTIC: {
                         neuron_id = this->add_neuron(new NeuronLogistic, BIAS_TYPE::NEXT_BIAS);
+                        COUT_DEBUG("Added LOGISTIC neuron." << std::endl);
                         break;
                     }
                 }
diff --git a/src/Network/NeuralNetwork.h b/src/Network/NeuralNetwork.h
index ba0e7aea6559861171827b54dd21c2813b9afe4d..3d0a51de5791d942531c539ff747094bb2557eca 100644
--- a/src/Network/NeuralNetwork.h
+++ b/src/Network/NeuralNetwork.h
@@ -420,6 +420,16 @@ namespace lib4neuro {
          * @param hidden_layer_neuron_type
          */
         LIB4NEURO_API explicit FullyConnectedFFN(std::vector<unsigned int>* neuron_numbers, NEURON_TYPE hidden_layer_neuron_type);
+
+        /**
+         *
+         * @param neuron_numbers
+         * @param hidden_layer_neuron_types
+         */
+        LIB4NEURO_API explicit FullyConnectedFFN(std::vector<unsigned int>* neuron_numbers, std::vector<NEURON_TYPE>* hidden_layer_neuron_types);
+
+    private:
+        void init(std::vector<unsigned int>* neuron_numbers, std::vector<NEURON_TYPE>* hidden_layer_neuron_types);
     };
 
 }