diff --git a/src/mo_likelihood.f90 b/src/mo_likelihood.f90
index 2f2de16a172ffbf086320905b696ec2801edab70..6aa2d8b9a108400a51548fb4b6873e6855863518 100644
--- a/src/mo_likelihood.f90
+++ b/src/mo_likelihood.f90
@@ -67,7 +67,7 @@ CONTAINS
     allocate(opti_sim(1))
     call opti_sim(1)%add(name="runoff", dim=2_i4)
     call eval(config, opti_sim=opti_sim)
-    call opti_sim(1)%set_pointer(ptr=runoff, name="runoff")
+    call opti_sim(1)%set_pointer(name="runoff", ptr=runoff)
     errors(:) = runoff(:,1)-data()
     likelihood_dp = exp(-0.5_dp * sum( errors(:) * errors(:) / stddev_global**2 ))
     deallocate(opti_sim)
@@ -97,7 +97,7 @@ CONTAINS
     allocate(opti_sim(1))
     call opti_sim(1)%add(name="runoff", dim=2_i4)
     call eval(config, opti_sim=opti_sim)
-    call opti_sim(1)%set_pointer(ptr=runoff, name="runoff")
+    call opti_sim(1)%set_pointer(name="runoff", ptr=runoff)
     errors(:) = runoff(:,1)-data()
     loglikelihood_dp = -0.5_dp * sum( errors(:) * errors(:) / stddev_global**2 )
     deallocate(opti_sim)
@@ -128,7 +128,7 @@ CONTAINS
     allocate(opti_sim(1))
     call opti_sim(1)%add(name="runoff", dim=2_i4)
     call eval(config, opti_sim=opti_sim)
-    call opti_sim(1)%set_pointer(ptr=runoff, name="runoff")
+    call opti_sim(1)%set_pointer(name="runoff", ptr=runoff)
     errors(:) = runoff(:,1)-data()
     likelihood_stddev_dp = exp(-0.5_dp * sum( errors(:) * errors(:) / stddev_in**2 ))
     deallocate(opti_sim)
@@ -168,7 +168,7 @@ CONTAINS
     allocate(opti_sim(1))
     call opti_sim(1)%add(name="runoff", dim=2_i4)
     call eval(config, opti_sim=opti_sim)
-    call opti_sim(1)%set_pointer(ptr=runoff, name="runoff")
+    call opti_sim(1)%set_pointer(name="runoff", ptr=runoff)
     errors(:) = runoff(:,1)-data()
     loglikelihood_stddev_dp = -0.5_dp * sum( errors(:) * errors(:) / stddev_in**2 )
     deallocate(opti_sim)
@@ -205,7 +205,7 @@ CONTAINS
     do i = 1 , size(opti_sim)
       if (opti_sim(i)%has('runoff')) then
         call opti_sim(i)%allocate(name="runoff", ndim=(/n, 1/))
-        call opti_sim(i)%set_pointer(ptr=runoff, name="runoff")
+        call opti_sim(i)%set_pointer(name="runoff", ptr=runoff)
         ! ToDo fix loop (don't loop, check opti_sim only 1)
       end if
     end do
diff --git a/src/mo_opt_functions.f90 b/src/mo_opt_functions.f90
index f1eade54fa49d674b1ae0e0b04ca7e4aaaaf50fb..19965fb91ab285a0c4169c0e450ebc2f79ef8a6d 100644
--- a/src/mo_opt_functions.f90
+++ b/src/mo_opt_functions.f90
@@ -5722,28 +5722,28 @@ CONTAINS
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('et')) then
         call opti_sim(iDomain)%allocate(name="et", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="et")
+        call opti_sim(iDomain)%set_pointer(name="et", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('neutrons')) then
         call opti_sim(iDomain)%allocate(name="neutrons", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="neutrons")
+        call opti_sim(iDomain)%set_pointer(name="neutrons", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('tws')) then
         call opti_sim(iDomain)%allocate(name="tws", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="tws")
+        call opti_sim(iDomain)%set_pointer(name="tws", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('sm')) then
         call opti_sim(iDomain)%allocate(name="sm", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="sm")
+        call opti_sim(iDomain)%set_pointer(name="sm", ptr=dummyDataPtr_2d)
       end if
     end do
 
@@ -5752,49 +5752,49 @@ CONTAINS
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('runoff')) then
         call opti_sim(iDomain)%allocate(name="runoff", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="runoff")
+        call opti_sim(iDomain)%set_pointer(name="runoff", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('BFI')) then
         call opti_sim(iDomain)%allocate(name="BFI", ndim=(/1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_1d, name="BFI")
+        call opti_sim(iDomain)%set_pointer(name="BFI", ptr=dummyDataPtr_1d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('lake_level')) then
         call opti_sim(iDomain)%allocate(name="lake_level", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="lake_level")
+        call opti_sim(iDomain)%set_pointer(name="lake_level", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('lake_volume')) then
         call opti_sim(iDomain)%allocate(name="lake_volume", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="lake_volume")
+        call opti_sim(iDomain)%set_pointer(name="lake_volume", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('lake_area')) then
         call opti_sim(iDomain)%allocate(name="lake_area", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="lake_area")
+        call opti_sim(iDomain)%set_pointer(name="lake_area", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('lake_spill')) then
         call opti_sim(iDomain)%allocate(name="lake_spill", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="lake_spill")
+        call opti_sim(iDomain)%set_pointer(name="lake_spill", ptr=dummyDataPtr_2d)
       end if
     end do
 
     do iDomain = 1 , nDomains
       if (opti_sim(iDomain)%has('lake_outflow')) then
         call opti_sim(iDomain)%allocate(name="lake_outflow", ndim=(/1, 1/))
-        call opti_sim(iDomain)%set_pointer(ptr=dummyDataPtr_2d, name="lake_outflow")
+        call opti_sim(iDomain)%set_pointer(name="lake_outflow", ptr=dummyDataPtr_2d)
       end if
     end do
 
diff --git a/src/mo_optimization_types.f90 b/src/mo_optimization_types.f90
index 7af6b392b1c75e495cd618f22721d08328f2e6f9..cba25011b4c6e7b2bcca73e90f47218133f5112a 100644
--- a/src/mo_optimization_types.f90
+++ b/src/mo_optimization_types.f90
@@ -174,8 +174,6 @@ MODULE mo_optimization_types
     integer(i4) :: i
 
     sim_data_get_id = -999
-    ! ToDo: loop -> subroutine get_id
-    ! i = this%get_id(name)
     do i = 1, size(this%variables)
       if (this%variables(i)%name == name) then
         sim_data_get_id = i
@@ -188,11 +186,10 @@ MODULE mo_optimization_types
   end function sim_data_get_id
 
   ! ToDo: generate with fypp
-  ! ToDo: switch ptr with name
-  subroutine sim_data_set_pointer_1d(this, ptr, name)
+  subroutine sim_data_set_pointer_1d(this, name, ptr)
     class(sim_data_t), target, intent(in) :: this
-    real(dp), dimension(:), pointer, intent(inout) :: ptr
     character(*), intent(in)    :: name
+    real(dp), dimension(:), pointer, intent(inout) :: ptr
 
     integer(i4) :: i
 
@@ -201,10 +198,10 @@ MODULE mo_optimization_types
     ptr => this%variables(i)%data_1d
   end subroutine sim_data_set_pointer_1d
 
-  subroutine sim_data_set_pointer_2d(this, ptr, name)
+  subroutine sim_data_set_pointer_2d(this, name, ptr)
     class(sim_data_t), target, intent(in) :: this
-    real(dp), dimension(:,:), pointer :: ptr
     character(*), intent(in)    :: name
+    real(dp), dimension(:,:), pointer :: ptr
 
     integer(i4) :: i
 
@@ -212,10 +209,10 @@ MODULE mo_optimization_types
     ptr => this%variables(i)%data_2d
   end subroutine sim_data_set_pointer_2d
 
-  subroutine sim_data_set_pointer_3d(this, ptr, name)
+  subroutine sim_data_set_pointer_3d(this, name, ptr)
     class(sim_data_t), target, intent(in) :: this
-    real(dp), dimension(:,:,:), pointer, intent(inout) :: ptr
     character(*), intent(in)    :: name
+    real(dp), dimension(:,:,:), pointer, intent(inout) :: ptr
 
     integer(i4) :: i
 
@@ -223,10 +220,10 @@ MODULE mo_optimization_types
     ptr => this%variables(i)%data_3d
   end subroutine sim_data_set_pointer_3d
 
-  subroutine sim_data_set_pointer_4d(this, ptr, name)
+  subroutine sim_data_set_pointer_4d(this, name, ptr)
     class(sim_data_t), target, intent(in) :: this
-    real(dp), dimension(:,:,:,:), pointer, intent(inout) :: ptr
     character(*), intent(in)    :: name
+    real(dp), dimension(:,:,:,:), pointer, intent(inout) :: ptr
 
     integer(i4) :: i
 
@@ -234,10 +231,10 @@ MODULE mo_optimization_types
     ptr => this%variables(i)%data_4d
   end subroutine sim_data_set_pointer_4d
 
-  subroutine sim_data_set_pointer_5d(this, ptr, name)
+  subroutine sim_data_set_pointer_5d(this, name, ptr)
     class(sim_data_t), target, intent(in) :: this
-    real(dp), dimension(:,:,:,:,:), pointer, intent(inout) :: ptr
     character(*), intent(in)    :: name
+    real(dp), dimension(:,:,:,:,:), pointer, intent(inout) :: ptr
 
     integer(i4) :: i