diff --git a/src/pf_tests/test_mo_sce.pf b/src/pf_tests/test_mo_sce.pf
index fa8d98b6970c6ec5ae4b86db5f8655a0e09fee66..9a12259e47512ddfd632f2ba36c4611f836196d3 100644
--- a/src/pf_tests/test_mo_sce.pf
+++ b/src/pf_tests/test_mo_sce.pf
@@ -1,12 +1,12 @@
 module test_mo_sce
-  
+
   use funit
   use mo_kind,             only: i4, i8, dp
   use mo_sce,              only: sce
-  use mo_opt_functions,    only: eval_dummy, ackley_objective, griewank_objective
-  use mo_optimization_utils, only: eval_interface, objective_interface
+  use mo_opt_functions,    only: ackley, griewank
+  use mo_optimization_utils, only: function_optimizee
   use mo_message, only: error_message
-  
+
   implicit none
 
   real(dp), dimension(:),   allocatable :: pini
@@ -21,9 +21,8 @@ module test_mo_sce
   integer(i4)   :: n
   logical       :: parallel
 
-  procedure(eval_interface), pointer :: eval
-  procedure(objective_interface), pointer :: obj_func
-  
+  type(function_optimizee) :: objective
+
 contains
 
   @test
@@ -31,7 +30,7 @@ contains
 
     real(dp)                ::  t = 1.e-7_dp
     integer(i4)             :: iPar
-  
+
     ! Dimension of test function = number of parameters
     n = 30
 
@@ -51,10 +50,9 @@ contains
     mask(:) = .true.
     pini(:) = 0.5_dp
     parallel=.false.
-    eval => eval_dummy
-    obj_func => ackley_objective
-    opt  = sce(eval,       & ! Mandatory IN: eval function
-        obj_func,             & ! Mandatory IN: Objective function
+    objective%func_pointer => ackley
+    opt  = sce( &
+        objective,          & ! Mandatory INOUT: objective
         pini,               & ! Mandatory IN: initial guess
         prange,             & ! Mandatory IN: range for each parameter (min, max)
         mymaxn=30000_i8,    & ! Optional  IN: maximal number of function evaluations
@@ -97,7 +95,7 @@ contains
 
     write(*,*) ''
     write(*,*) 'number of function evaluations: neval = ', neval
-    write(*,*) 'best function value found:      bestf = ', obj_func(opt, eval)
+    write(*,*) 'best function value found:      bestf = ', objective%evaluate(opt)
     write(*,*) 'global minimal function value:  optf  = ', 0.0_dp
     write(*,*) ''
 
@@ -116,13 +114,13 @@ contains
     end if
 
     ! Check restart
-  
+
     bestf   = 0.
     neval   = 0
     history = 0.
 
-    opt = sce(eval,       & ! Mandatory IN  : Objective function
-            obj_func,             & ! Mandatory IN: Objective function
+    opt  = sce( &
+        objective,          & ! Mandatory INOUT: objective
         pini,               & ! Mandatory IN  : initial guess
         prange,             & ! Mandatory IN  : range for each parameter (min, max)
         restart=.true.,     & ! Do the restart
@@ -134,7 +132,7 @@ contains
 
     write(*,*) ''
     write(*,*) 'number of function evaluations: neval = ', neval
-    write(*,*) 'best function value found:      bestf = ', obj_func(opt, eval)
+    write(*,*) 'best function value found:      bestf = ', objective%evaluate(opt)
     write(*,*) 'global minimal function value:  optf  = ', 0.0_dp
     write(*,*) ''
 
@@ -159,7 +157,7 @@ contains
 
     real(dp)                ::  t = 1.e-7_dp
     integer(i4)             ::  iPar
-  
+
     ! Dimension of test function = number of parameters
     n = 3
 
@@ -179,10 +177,9 @@ contains
     mask(:) = .true.
     pini(:) = 0.5_dp
     parallel=.false.
-    eval => eval_dummy
-    obj_func => griewank_objective
-    opt  = sce(eval,       & ! Mandatory IN: eval function
-        obj_func,             & ! Mandatory IN: Objective function
+    objective%func_pointer => griewank
+    opt  = sce( &
+        objective,          & ! Mandatory INOUT: objective
         pini,               & ! Mandatory IN: initial guess
         prange,             & ! Mandatory IN: range for each parameter (min, max)
         mymaxn=30000_i8,    & ! Optional  IN: maximal number of function evaluations
@@ -225,7 +222,7 @@ contains
 
     write(*,*) ''
     write(*,*) 'number of function evaluations: neval = ', neval
-    write(*,*) 'best function value found:      bestf = ', obj_func(opt, eval)
+    write(*,*) 'best function value found:      bestf = ', objective%evaluate(opt)
     write(*,*) 'global minimal function value:  optf  = ', 0.0_dp
     write(*,*) ''
 
@@ -244,13 +241,13 @@ contains
     end if
 
     ! Check restart
-  
+
     bestf   = 0.
     neval   = 0
     history = 0.
 
-    opt = sce(eval,       & ! Mandatory IN  : Objective function
-            obj_func,             & ! Mandatory IN: Objective function
+    opt  = sce( &
+        objective,          & ! Mandatory INOUT: objective
         pini,               & ! Mandatory IN  : initial guess
         prange,             & ! Mandatory IN  : range for each parameter (min, max)
         restart=.true.,     & ! Do the restart
@@ -262,7 +259,7 @@ contains
 
     write(*,*) ''
     write(*,*) 'number of function evaluations: neval = ', neval
-    write(*,*) 'best function value found:      bestf = ', obj_func(opt, eval)
+    write(*,*) 'best function value found:      bestf = ', objective%evaluate(opt)
     write(*,*) 'global minimal function value:  optf  = ', 0.0_dp
     write(*,*) ''
 
@@ -281,5 +278,5 @@ contains
     deallocate(pini, prange, opt, mask)
 
   end subroutine test_sce_griewank
-  
-end module test_mo_sce
\ No newline at end of file
+
+end module test_mo_sce