diff --git a/src/language/ast/ASTNodeDataTypeBuilder.cpp b/src/language/ast/ASTNodeDataTypeBuilder.cpp
index dcde89f1c99ef6ad6565ec287475b18aa20c2749..58d6d0cf1e59920fd5f382d61360e0692d726e43 100644
--- a/src/language/ast/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ast/ASTNodeDataTypeBuilder.cpp
@@ -166,7 +166,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
         n.children[0]->m_data_type = ASTNodeDataType::build<ASTNodeDataType::function_t>();
 
         const std::string& symbol = n.children[0]->string();
-        auto [i_symbol, success]  = n.m_symbol_table->find(symbol, n.children[0]->begin());
+
+        auto [i_symbol, success] = n.m_symbol_table->find(symbol, n.children[0]->begin());
 
         auto& function_table = n.m_symbol_table->functionTable();
 
@@ -283,6 +284,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
           // LCOV_EXCL_STOP
         };
 
+#warning probably useless now
         if (image_domain_node.is_type<language::type_expression>()) {
           std::vector<std::shared_ptr<const ASTNodeDataType>> sub_data_type_list;
           sub_data_type_list.reserve(image_domain_node.children.size());
@@ -298,6 +300,10 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
           check_image_type(image_domain_node);
         }
 
+        this->_buildNodeDataTypes(image_expression_node);
+
+        ASTNodeNaturalConversionChecker(image_expression_node, image_domain_node.m_data_type);
+
         n.m_data_type = ASTNodeDataType::build<ASTNodeDataType::void_t>();
         return;
       } else if (n.is_type<language::name>()) {
@@ -434,7 +440,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
       }
     } else if (n.is_type<language::function_evaluation>()) {
       if (n.children[0]->m_data_type == ASTNodeDataType::function_t) {
-        const std::string& function_name  = n.children[0]->string();
+        const std::string& function_name = n.children[0]->string();
+
         auto [i_function_symbol, success] = n.m_symbol_table->find(function_name, n.children[0]->begin());
 
         auto& function_table = n.m_symbol_table->functionTable();
@@ -518,13 +525,5 @@ ASTNodeDataTypeBuilder::ASTNodeDataTypeBuilder(ASTNode& node)
 
   this->_buildNodeDataTypes(node);
 
-  FunctionTable& function_table = node.m_symbol_table->functionTable();
-  for (size_t function_id = 0; function_id < function_table.size(); ++function_id) {
-    FunctionDescriptor& function_descriptor = function_table[function_id];
-    ASTNode& function_expression            = function_descriptor.definitionNode();
-
-    this->_buildNodeDataTypes(function_expression);
-  }
-
   std::cout << " - build node data types\n";
 }
diff --git a/src/language/ast/ASTNodeNaturalConversionChecker.cpp b/src/language/ast/ASTNodeNaturalConversionChecker.cpp
index bb04ffe65db2ebd5952d047c522b2a457afe54ff..b740faa821c41d55fcd47e2590c21c3512fd71c1 100644
--- a/src/language/ast/ASTNodeNaturalConversionChecker.cpp
+++ b/src/language/ast/ASTNodeNaturalConversionChecker.cpp
@@ -28,8 +28,10 @@ ASTNodeNaturalConversionChecker::_checkIsNaturalExpressionConversion(const ASTNo
                                                                      const ASTNodeDataType& data_type,
                                                                      const ASTNodeDataType& target_data_type) const
 {
-  if (target_data_type == ASTNodeDataType::vector_t) {
-    switch (data_type) {
+  if (target_data_type == ASTNodeDataType::typename_t) {
+    this->_checkIsNaturalExpressionConversion(node, data_type, target_data_type.contentType());
+  } else if (target_data_type == ASTNodeDataType::vector_t) {
+    switch (node.m_data_type) {
     case ASTNodeDataType::list_t: {
       if (node.children.size() != target_data_type.dimension()) {
         throw ParseError("incompatible dimensions in affectation", std::vector{node.begin()});