diff --git a/include/fmpi_data.h b/include/fmpi_data.h
index cf6dd062a212639eb542e832e08cd6da51a7a11c..c119434484db02c39cfe2dcaa8361dc9671cee8e 100644
--- a/include/fmpi_data.h
+++ b/include/fmpi_data.h
@@ -30,8 +30,8 @@
 #include <stddef.h> // size_t
 // Internal
 #include "internal/fmpi_common.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_data_generic.h"
-#include "internal/generic/fmpi_type.h"
 /*==============================================================================
     TYPE
 ==============================================================================*/
diff --git a/include/internal/fmpi_futhark.h b/include/internal/fmpi_futhark.h
index 1d93ac4178581665e1eae8885a8e8bebb58346c5..f96d0e21a11a7f7a59d1dfe171a6224ae2ed868e 100644
--- a/include/internal/fmpi_futhark.h
+++ b/include/internal/fmpi_futhark.h
@@ -30,8 +30,8 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_error.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_futhark_generic.h"
-#include "internal/generic/fmpi_type.h"
 /*==============================================================================
     STRUCT
 ==============================================================================*/
diff --git a/include/internal/fmpi_type.h b/include/internal/fmpi_type.h
new file mode 100644
index 0000000000000000000000000000000000000000..8f9df15d2acd881426f49f65acdf5ff919ad2acc
--- /dev/null
+++ b/include/internal/fmpi_type.h
@@ -0,0 +1,73 @@
+// SPDX-License-Identifier: 0BSD
+/*!
+ * @file
+ * @date 20.06.2022
+ * @license{
+ * BSD Zero Clause License
+ *
+ * Copyright (c) 2022 by Raphael Bach
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ * }
+ */
+/*==============================================================================
+    GUARD
+==============================================================================*/
+#ifndef FMPI_TYPE_H_20220620234502
+#define FMPI_TYPE_H_20220620234502
+/*==============================================================================
+    INCLUDE
+==============================================================================*/
+// C Standard Library
+#include <stddef.h> // size_t
+// Internal
+#include "internal/generic/fmpi_type_generic.h"
+/*==============================================================================
+    TYPE
+==============================================================================*/
+typedef enum fmpi_type_base {
+    FMPI_TYPE_START = 0,
+    FMPI_TYPE_i8    = 0,
+    FMPI_TYPE_i16   = 1,
+    FMPI_TYPE_i32   = 2,
+    FMPI_TYPE_i64   = 3,
+    FMPI_TYPE_u8    = 4,
+    FMPI_TYPE_u16   = 5,
+    FMPI_TYPE_u32   = 6,
+    FMPI_TYPE_u64   = 7,
+    FMPI_TYPE_f32   = 8,
+    FMPI_TYPE_f64   = 9,
+    FMPI_TYPE_bool  = 10,
+    FMI_TYPE_END
+} fmpi_type_base;
+/**
+ * Derived types
+ *
+ * - The Futhark C API passes parameters to a Futhark function differently
+ * depending on their type being an `arithmetic type`, a `struct type` or an
+ * `array type`.
+ * - Loosely based on the definition of derived types in C17 6.2.5
+ */
+typedef enum fmpi_type_derived {
+    FMPI_TYPE_NONE, //!< Arithmetic type
+    FMPI_TYPE_ARRAY //!< Array type
+} fmpi_type_derived;
+
+typedef struct fmpi_type {
+    enum fmpi_type_base base;
+    enum fmpi_type_derived derived;
+    size_t size;
+} fmpi_type;
+/*==============================================================================
+    GUARD
+==============================================================================*/
+#endif // FMPI_TYPE_H_20220620234502
diff --git a/include/internal/generic/fmpi_data_generic.h b/include/internal/generic/fmpi_data_generic.h
index 5bfdb9e5b18be47726fe488b00b07afa0db84b30..1a5fb5fda5a41d6618876cbe5a16b76a0f3a857c 100644
--- a/include/internal/generic/fmpi_data_generic.h
+++ b/include/internal/generic/fmpi_data_generic.h
@@ -30,6 +30,7 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_futhark_generic.h b/include/internal/generic/fmpi_futhark_generic.h
index 29732ce2d22fbd357cdf2b7f30a334d4a466aaf6..f97b4e251af876b2d2be6db043b9563935be7c4a 100644
--- a/include/internal/generic/fmpi_futhark_generic.h
+++ b/include/internal/generic/fmpi_futhark_generic.h
@@ -33,6 +33,7 @@
 // Internal
 #include "../fmpi_common.h"
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_generic.h b/include/internal/generic/fmpi_generic.h
index 3b0e175a773fbe57f739aad308ba9cab3730f815..18c6232521dac6e570ea77fb6b4213c83936f621 100644
--- a/include/internal/generic/fmpi_generic.h
+++ b/include/internal/generic/fmpi_generic.h
@@ -30,8 +30,6 @@
 #include "../../../external/cpl/cpl_map.h"
 #include "../../../external/cpl/cpl_token.h"
 #include "../../../external/cpl/cpl_util.h"
-// Internal
-#include "fmpi_type.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_reduce_generic.h b/include/internal/generic/fmpi_reduce_generic.h
index 4372a1d69acbdeeb485d3abf8d662f633471ddd3..034b263ae58d8a1ef2084d3de45c1b160010bf64 100644
--- a/include/internal/generic/fmpi_reduce_generic.h
+++ b/include/internal/generic/fmpi_reduce_generic.h
@@ -30,6 +30,7 @@
 #include <stddef.h> // size_t
 // Internal
 #include "fmpi_generic.h"
+#include "fmpi_type_generic.h"
 /*==============================================================================
     MACRO
 ==============================================================================*/
diff --git a/include/internal/generic/fmpi_type.h b/include/internal/generic/fmpi_type_generic.h
similarity index 77%
rename from include/internal/generic/fmpi_type.h
rename to include/internal/generic/fmpi_type_generic.h
index 3bef07f110397db24a5016b0682699f55c1864c0..4b6204706bebfb0fdcb4aff5349822bf88b43aad 100644
--- a/include/internal/generic/fmpi_type.h
+++ b/include/internal/generic/fmpi_type_generic.h
@@ -27,10 +27,9 @@
     INCLUDE
 ==============================================================================*/
 // C Standard Library
-#include <stddef.h> // size_t
 #include <stdint.h>
 /*==============================================================================
-    TYPEDEF
+    TYPE
 ==============================================================================*/
 // Match C type name with Futhark type name
 typedef int8_t   i8;
@@ -44,44 +43,6 @@ typedef uint64_t u64;
 typedef float    f32;
 typedef double   f64;
 typedef _Bool    bool;
-/*==============================================================================
-    ENUM
-==============================================================================*/
-typedef enum fmpi_type_base {
-    FMPI_TYPE_START = 0,
-    FMPI_TYPE_i8    = 0,
-    FMPI_TYPE_i16   = 1,
-    FMPI_TYPE_i32   = 2,
-    FMPI_TYPE_i64   = 3,
-    FMPI_TYPE_u8    = 4,
-    FMPI_TYPE_u16   = 5,
-    FMPI_TYPE_u32   = 6,
-    FMPI_TYPE_u64   = 7,
-    FMPI_TYPE_f32   = 8,
-    FMPI_TYPE_f64   = 9,
-    FMPI_TYPE_bool  = 10,
-    FMI_TYPE_END
-} fmpi_type_base;
-/**
- * Derived types
- *
- * - The Futhark C API passes parameters to a Futhark function differently
- * depending on their type being an `arithmetic type`, a `struct type` or an
- * `array type`.
- * - Loosely based on the definition of derived types in C17 6.2.5
- */
-typedef enum fmpi_type_derived {
-    FMPI_TYPE_NONE, //!< Arithmetic type
-    FMPI_TYPE_ARRAY //!< Array type
-} fmpi_type_derived;
-/*==============================================================================
-    STRUCT
-==============================================================================*/
-typedef struct fmpi_type {
-    enum fmpi_type_base base;
-    enum fmpi_type_derived derived;
-    size_t size;
-} fmpi_type;
 /*==============================================================================
     DEFINE
 ==============================================================================*/
diff --git a/src/fmpi_data.c b/src/fmpi_data.c
index b333b6225f06e9b18a9a5961b8b77b1a033c2db9..bf8cf93b90cabd9e85867f8eac52fd0bc4dbbea2 100644
--- a/src/fmpi_data.c
+++ b/src/fmpi_data.c
@@ -29,7 +29,7 @@
 // Internal
 #include "internal/fmpi_common.h"
 #include "internal/fmpi_ctx.h"
-#include "internal/generic/fmpi_type.h"
+#include "internal/fmpi_type.h"
 /*==============================================================================
     PUBLIC FUNCTION DEFINITION
 ==============================================================================*/
diff --git a/src/fmpi_futhark.c b/src/fmpi_futhark.c
index d09ef975d02cc9474c0b0ed4761269ff7d3c72ba..7709cb64410a0a125fe65f8eaafd5dd71ac31761 100644
--- a/src/fmpi_futhark.c
+++ b/src/fmpi_futhark.c
@@ -30,6 +30,7 @@
 // Internal
 #include "internal/fmpi_common.h"
 #include "internal/fmpi_futhark_entry.h"
+#include "internal/fmpi_type.h"
 #include "internal/generic/fmpi_generic.h"
 /*==============================================================================
     STATIC
diff --git a/src/fmpi_reduce.c b/src/fmpi_reduce.c
index c0191d8e4c657dd81c163e229dc84bf19c8a8a3e..572df19a56aad35ff92e887214885424f99c5e09 100644
--- a/src/fmpi_reduce.c
+++ b/src/fmpi_reduce.c
@@ -34,6 +34,7 @@
 #include "internal/fmpi_futhark_entry.h"
 #include "internal/fmpi_mpi.h"
 #include "internal/generic/fmpi_generic.h"
+#include "internal/generic/fmpi_type_generic.h"
 /*==============================================================================
     PUBLIC FUNCTION DEFINITION
 ==============================================================================*/
diff --git a/src/fmpi_task.c b/src/fmpi_task.c
index 4c37be67a9b3580f73930238626c5bf2b1e3b410..f5ac9634bd496f6855466bb1db21e6a25c092b58 100644
--- a/src/fmpi_task.c
+++ b/src/fmpi_task.c
@@ -60,6 +60,7 @@ struct fmpi_task fmpi_task_register(
         if(task.domains[i].parts == NULL) {
             FMPI_RAISE_ERROR(ctx->err_handler, "FMPI", "fmpi_new_domain() failed!");
             continue;
+            struct fmpi_type t;
         }
         void * start = fmpi_futhark_new_data(
             ctx->fut, task.domains[i].parts[rank].start, task.domains[i].data.type.base,