diff --git a/src/Connection.f08 b/src/Connection.f08
new file mode 100644
index 0000000000000000000000000000000000000000..28811ea8fb60e698dfc84acfd3a1be6c2f201238
--- /dev/null
+++ b/src/Connection.f08
@@ -0,0 +1,169 @@
+module Connection_mod
+    implicit none
+
+    public
+
+    ! TODO smazat
+    !> Dummy class Neuron 
+    !! blabla
+    type :: Neuron
+        real :: state  ! TODO v realne tride 'private'!
+
+        contains
+            procedure :: get_state => get_state_impl
+            procedure :: set_state => set_state_impl
+    end type Neuron
+
+    !------------------!------------------------------------------------------------------------
+    ! Type definitions !
+    !------------------!
+
+    !> Represents a connection between two neurons.
+    type, abstract :: Connection
+        class(Neuron), pointer, private :: input_neuron
+        class(Neuron), pointer, private :: output_neuron
+        real, private                   :: weight
+
+        contains
+
+            !> Adds a gven value to the current weight of the  
+            !! connection.
+            !! @param added_value Number (real) to be added to the current weight
+            procedure :: adjust_weight     => adjust_weight_impl
+
+            ! Constructors
+            procedure :: new_connection    => new_connection_impl
+
+            ! Getters and setters    
+            procedure :: get_input_neuron  => get_input_neuron_impl
+            procedure :: get_output_neuron => get_output_neuron_impl
+            procedure :: get_weight        => get_weight_impl
+
+    end type Connection
+
+    type, extends(Connection) :: IntervalConnection
+       contains
+          procedure :: pass_signal => pass_signal_impl
+    end type IntervalConnection
+
+    !------------!------------------------------------------------------------------------------
+    ! Interfaces !
+    !------------!
+
+    ! For signatures of abstract functions
+
+    !interface Connection
+    !
+    !end interface Connection
+
+    contains
+    !------------------------!------------------------------------------------------------------
+    ! Method implementations !
+    ! -----------------------!
+
+        !--------------!
+        ! class Neuron !
+        !--------------!
+        ! TODO smazat
+        function get_state_impl(this) result(state)
+            class(Neuron), intent(in) :: this
+            real                      :: state
+
+            state = this%state
+        end function get_state_impl
+
+        ! TODO smazat
+        subroutine set_state_impl(this, new_state)
+            class(Neuron), target  :: this
+            real, intent(in)       :: new_state
+            
+            this%state = new_state
+        end subroutine set_state_impl
+
+        !------------------!
+        ! class Connection !
+        !------------------!
+        subroutine adjust_weight_impl(this, added_value)
+            class(Connection), intent(inout) :: this
+            real, intent(in)                 :: added_value
+
+            this%weight = this%weight + added_value
+        end subroutine adjust_weight_impl
+
+        !--------------------------!
+        ! class IntervalConnection !
+        !--------------------------!
+        subroutine pass_signal_impl(this)
+            class(IntervalConnection), intent(in) :: this
+
+            call this%output_neuron%set_state(5.0)
+        end subroutine pass_signal_impl
+
+        !--------------!------------------------------------------------------------------------
+        ! Constructors !
+        !--------------!
+        subroutine new_connection_impl(this, input_neuron, output_neuron, weight)
+            class(Connection), intent(out)     :: this
+            class(Neuron), pointer, intent(in) :: input_neuron
+            class(Neuron), pointer, intent(in) :: output_neuron
+            real, intent(in)                   :: weight
+
+            this%input_neuron  => input_neuron
+            this%output_neuron => output_neuron
+            this%weight        = weight
+
+            print *, 'Constructor!'
+        end subroutine new_connection_impl
+
+        !-------------------!-------------------------------------------------------------------
+        ! Getters & Setters !
+        !-------------------!
+        function get_input_neuron_impl(this) result (input_neuron)
+            class(Connection), target, intent(in) :: this
+            class(Neuron), pointer                :: input_neuron
+
+            input_neuron => this%input_neuron
+        end function get_input_neuron_impl
+
+        function get_output_neuron_impl(this) result (output_neuron)
+            class(Connection), target, intent(in) :: this
+            class(Neuron), pointer                :: output_neuron
+
+            output_neuron => this%output_neuron
+        end function get_output_neuron_impl
+                
+        function get_weight_impl(this) result (weight)
+            class(Connection), intent(in) :: this
+            real                          :: weight
+
+            weight = this%weight
+        end function get_weight_impl
+end module Connection_mod
+
+program a
+    use Connection_mod
+
+    type(Neuron), target :: n1
+    type(Neuron), target :: n2
+
+    type(Neuron), pointer :: n1_p
+    type(Neuron), pointer :: n2_p
+    type(Neuron), pointer :: dummy_p
+
+    type(IntervalConnection) :: con
+   
+    n1 = Neuron(21)
+    n2 = Neuron(13)
+
+    n1_p => n1
+    n2_p => n2
+    call con%new_connection(n1, n2, 5.12)
+
+    print *, 'weight: ', con%get_weight()
+
+    dummy_p => con%get_input_neuron()
+    print *, dummy_p%get_state()
+    dummy_p => con%get_output_neuron()
+    print *, dummy_p%get_state()
+
+end program a