diff --git a/src/net_m.f90 b/src/net_m.f90
new file mode 100644
index 0000000000000000000000000000000000000000..0f0c4e20ba292089954335f88dbd70697f525aa3
--- /dev/null
+++ b/src/net_m.f90
@@ -0,0 +1,170 @@
+!> Module containing classes representing the whole 
+!! neural network.
+!!
+!! It uses 'neuron_m' module.
+!!
+!! @author Martin Beseda
+!! @date 2018
+module net_m
+    !use interconnection_m
+    use data_kinds_4neuro_m
+    use time_measurement_m
+    use neuron_m
+    use connection_m
+
+    implicit none
+
+    public
+
+    !-------------!------------------------------------------------------------------------------
+    ! class net_t !
+    !-------------!
+
+    !> Class representing a general network
+    type :: net_t
+        private
+
+        character(:), allocatable                 :: net_type           !< Type of the net
+        integer(kind=integer_4neuro)              :: num_of_neurons     !< Number of neurons in the net
+        character(:), allocatable                 :: training_method    !< Used training method
+
+        class(neuron_t), allocatable              :: neuron_arr         !< Array containing all neurons
+        integer(kind=integer_4neuro), allocatable :: input_neuron_arr   !< Array of input neuron indices
+        integer(kind=integer_4neuro), allocatable :: output_neuron_arr  !< Array of output neuron indices
+        class(connection_t), allocatable          :: connection_arr     !< Array of all connections
+
+    contains
+        !> Prints information about the network to the standard output.
+        procedure :: print_info => print_info_impl
+
+        !> Saves the network instance to the Fortran binary file
+        procedure :: save_net_bin => save_net_bin_impl
+
+    end type net_t
+
+    interface net_t
+        !> Constructor of net_t class
+        !! Loads complete info about network from file
+        !! @oaram[in] filepath Path to the file with network configuration
+        !! @return Returns pointer to the new instance of the class net_t
+        module procedure :: new_net_1
+    end interface net_t
+
+
+    !------------------!---------------------------------------------------------------------
+    ! class mock_net_t !
+    !------------------!
+
+    !> Mock net_t class
+    type, extends(net_t) :: mock_net_t
+    end type mock_net_t
+    
+    interface mock_net_t
+        !> Non-parametric constructor of mock_net_t class
+        !! @return Returns pointer to the instance of the class mock_net_t
+        module procedure ::  new_mock_net
+    end interface mock_net_t
+
+contains
+    !------------------------!---------------------------------------------------------------
+    ! Method implementations !
+    !------------------------!
+
+    !-------------!--------------------------------------------------------------------------
+    ! class net_t !
+    !-------------!
+
+    !--------------!-------------------------------------------------------------------------
+    ! Constructors !
+    !--------------!
+
+    !> Constructor of net_t class
+    !! Loads complete info about network from Fortran binary file
+    !! @oaram[in] filepath Path to the JSON file with network configuration
+    !! @return Returns pointer to the instance of the class net_t
+    function new_net_1(filepath) result(new_obj)
+        character(len=*), intent(in) :: filepath
+        class(net_t), pointer        :: new_obj
+        character(len=50)            :: str  !TODO udelat dynamicky, ne s fixni delkou
+#ifdef TIME_PROFILING
+        real                         :: start_time
+        call time_profiling_start(start_time)
+#endif
+        allocate(new_obj)
+
+        open(unit=11, file=filepath, form="unformatted", status="old")
+        read(11) str
+        read(11) new_obj%num_of_neurons
+
+        print *,str
+        new_obj%net_type = str
+
+        !TODO dopsat
+#ifdef TIME_PROFILING
+        call time_profiling_stop(start_time, 'new_net')
+#endif
+    end function new_net_1
+
+    !> Prints information about the network to the standard output.
+    subroutine print_info_impl(this)
+        class(net_t), intent(in) :: this
+#ifdef TIME_PROFILING
+        real                     :: start_time
+        call time_profiling_start(start_time)
+#endif
+        write(*,*) '+--------------+'
+        write(*,*) '| Network info |'
+        write(*,*) '+--------------|'
+        write(*,*) 'Type: ', this%net_type
+        write(*,*) 'Number of neurons: ', this%num_of_neurons
+        !TODO dopsat
+#ifdef TIME_PROFILING
+        call time_profiling_stop(start_time, 'print_info_impl')
+#endif
+    end subroutine print_info_impl
+
+    !----------------!-----------------------------------------------------------------------
+    ! Common methods !
+    !----------------!
+    
+    !> Saves the network instance to the Fortran binary file
+    subroutine save_net_bin_impl(this, filename)
+        class(net_t), intent(in)     :: this      !< Instance of the class 'net_t'
+        character(len=*), intent(in) :: filename  !< Name of the file, where the net will be saved into
+
+        open(unit=11, file=filename, form="unformatted")
+
+        write(11) this%net_type
+        write(11) this%num_of_neurons
+
+        close(unit=11)
+    end subroutine save_net_bin_impl
+
+
+    !------------------!---------------------------------------------------------------------
+    ! class mock_net_t !
+    !------------------!
+
+    !--------------!-------------------------------------------------------------------------
+    ! Constructors !
+    !--------------!
+    
+    !> Contructor of mock_net_t class
+    !! @return Returns pointer to the instance of the class mock_net_t
+    function new_mock_net() result(new_obj)
+        class(net_t), pointer :: new_obj
+#ifdef TIME_PROFILING
+        real                  :: start_time
+        call time_profiling_start(start_time)
+#endif
+        allocate(new_obj)
+        new_obj%net_type = 'MOCK NETWORK'
+        new_obj%num_of_neurons = 5
+        new_obj%training_method = 'MOCK TRAINING'
+        !TODO dopsat init zbylych polozek
+#ifdef TIME_PROFILING
+        call time_profiling_stop(start_time, 'new_mock_net')
+#endif
+       
+    end function new_mock_net
+end module net_m
diff --git a/src/net_m_mem_leak_test.f90 b/src/net_m_mem_leak_test.f90
new file mode 100644
index 0000000000000000000000000000000000000000..88ba33848832db3c8cf7928ff0a67aff106ca2cf
--- /dev/null
+++ b/src/net_m_mem_leak_test.f90
@@ -0,0 +1,24 @@
+program net_mem_leak_test
+    use data_kinds_4neuro_m
+    use net_m
+
+    class(net_t), pointer :: net1, net2
+
+    print *, '+--------------------------------------------------+'
+    print *, '| STARTING MEMORY LEAK TESTING OF THE MODULE NET_M |'
+    print *, '+--------------------------------------------------+'
+
+    print *, 'Creating instances of the class net_t...'
+    net1 => mock_net_t()
+
+    call net1%print_info()
+
+    call net1%save_net_bin("stored_net.dat")
+
+    net2 => net_t("stored_net.dat")
+    
+    call net2%print_info()
+
+    deallocate(net1)
+    deallocate(net2)
+end program net_mem_leak_test
diff --git a/src/neuron_m.f90 b/src/neuron_m.f90
index 4d7a4976f3c5d4e842f956b8b10e44b5e2589406..373d0eef8dc3d76b8b4525849ec83d4f0ffab3c5 100644
--- a/src/neuron_m.f90
+++ b/src/neuron_m.f90
@@ -287,7 +287,7 @@ module neuron_m
             call time_profiling_start(start_time)
 #endif 
             this%potential = 0
-            this%state     = 0
+            this%state     = 0  !TODO maybe init with values from normal distribution
 
 #ifdef TIME_PROFILING
             call time_profiling_stop(start_time, 'neuron_init_components_impl')