diff --git a/libomptarget/include/OpenMP/InternalTypes.h b/libomptarget/include/OpenMP/InternalTypes.h
index fd5836e..bd84c38 100644
--- a/libomptarget/include/OpenMP/InternalTypes.h
+++ b/libomptarget/include/OpenMP/InternalTypes.h
@@ -75,6 +75,78 @@
 void **__kmpc_omp_get_target_async_handle_ptr(int32_t gtid)
     __attribute__((weak));
 
+/**
+ * The argument set that is passed from asynchronous memory copy to block
+ * version of memory copy invoked in helper task
+ */
+struct TargetMemcpyArgsTy {
+  /**
+   * Common attribuutes
+   */
+  void *Dst;
+  const void *Src;
+  int DstDevice;
+  int SrcDevice;
+
+  /**
+   * The flag that denotes single dimensional or rectangle dimensional copy
+   */
+  bool IsRectMemcpy;
+
+  /**
+   * Arguments for single dimensional copy
+   */
+  size_t Length;
+  size_t DstOffset;
+  size_t SrcOffset;
+
+  /**
+   * Arguments for rectangle dimensional copy
+   */
+  size_t ElementSize;
+  int NumDims;
+  const size_t *Volume;
+  const size_t *DstOffsets;
+  const size_t *SrcOffsets;
+  const size_t *DstDimensions;
+  const size_t *SrcDimensions;
+
+  /**
+   * Constructor for single dimensional copy
+   */
+  TargetMemcpyArgsTy(void *Dst, const void *Src, size_t Length,
+                     size_t DstOffset, size_t SrcOffset, int DstDevice,
+                     int SrcDevice)
+      : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
+        IsRectMemcpy(false), Length(Length), DstOffset(DstOffset),
+        SrcOffset(SrcOffset), ElementSize(0), NumDims(0), Volume(0),
+        DstOffsets(0), SrcOffsets(0), DstDimensions(0), SrcDimensions(0){};
+
+  /**
+   * Constructor for rectangle dimensional copy
+   */
+  TargetMemcpyArgsTy(void *Dst, const void *Src, size_t ElementSize,
+                     int NumDims, const size_t *Volume,
+                     const size_t *DstOffsets, const size_t *SrcOffsets,
+                     const size_t *DstDimensions, const size_t *SrcDimensions,
+                     int DstDevice, int SrcDevice)
+      : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
+        IsRectMemcpy(true), Length(0), DstOffset(0), SrcOffset(0),
+        ElementSize(ElementSize), NumDims(NumDims), Volume(Volume),
+        DstOffsets(DstOffsets), SrcOffsets(SrcOffsets),
+        DstDimensions(DstDimensions), SrcDimensions(SrcDimensions){};
+};
+
+struct TargetMemsetArgsTy {
+  // Common attributes of a memset operation
+  void *Ptr;
+  int C;
+  size_t N;
+  int DeviceNum;
+
+  // no constructors defined, because this is a PoD
+};
+
 } // extern "C"
 
 #endif // OMPTARGET_OPENMP_INTERNAL_TYPES_H
diff --git a/libomptarget/src/CMakeLists.txt b/libomptarget/src/CMakeLists.txt
index 429a670..42674e2 100644
--- a/libomptarget/src/CMakeLists.txt
+++ b/libomptarget/src/CMakeLists.txt
@@ -15,7 +15,6 @@
 add_llvm_library(omptarget
   SHARED
 
-  api.cpp
   device.cpp
   interface.cpp
   omptarget.cpp
@@ -24,6 +23,7 @@
   PluginManager.cpp
   DeviceImage.cpp
 
+  OpenMP/API.cpp
   OpenMP/Mapping.cpp
   OpenMP/InteropAPI.cpp
   OpenMP/OMPT/Callback.cpp
diff --git a/libomptarget/src/api.cpp b/libomptarget/src/OpenMP/API.cpp
similarity index 92%
rename from libomptarget/src/api.cpp
rename to libomptarget/src/OpenMP/API.cpp
index 0341e0c..b73315f 100644
--- a/libomptarget/src/api.cpp
+++ b/libomptarget/src/OpenMP/API.cpp
@@ -13,9 +13,9 @@
 #include "PluginManager.h"
 #include "device.h"
 #include "omptarget.h"
-#include "private.h"
 #include "rtl.h"
 
+#include "OpenMP/InternalTypes.h"
 #include "OpenMP/omp.h"
 #include "Shared/Profile.h"
 
@@ -26,6 +26,37 @@
 #include <cstring>
 #include <mutex>
 
+void *targetAllocExplicit(size_t Size, int DeviceNum, int Kind,
+                          const char *Name);
+void targetFreeExplicit(void *DevicePtr, int DeviceNum, int Kind,
+                        const char *Name);
+void *targetLockExplicit(void *HostPtr, size_t Size, int DeviceNum,
+                         const char *Name);
+void targetUnlockExplicit(void *HostPtr, int DeviceNum, const char *Name);
+
+// Implemented in libomp, they are called from within __tgt_* functions.
+extern "C" {
+int __kmpc_get_target_offload(void) __attribute__((weak));
+kmp_task_t *__kmpc_omp_task_alloc(ident_t *loc_ref, int32_t gtid, int32_t flags,
+                                  size_t sizeof_kmp_task_t,
+                                  size_t sizeof_shareds,
+                                  kmp_routine_entry_t task_entry)
+    __attribute__((weak));
+
+kmp_task_t *
+__kmpc_omp_target_task_alloc(ident_t *loc_ref, int32_t gtid, int32_t flags,
+                             size_t sizeof_kmp_task_t, size_t sizeof_shareds,
+                             kmp_routine_entry_t task_entry, int64_t device_id)
+    __attribute__((weak));
+
+int32_t __kmpc_omp_task_with_deps(ident_t *loc_ref, int32_t gtid,
+                                  kmp_task_t *new_task, int32_t ndeps,
+                                  kmp_depend_info_t *dep_list,
+                                  int32_t ndeps_noalias,
+                                  kmp_depend_info_t *noalias_dep_list)
+    __attribute__((weak));
+}
+
 EXTERN int omp_get_num_devices(void) {
   TIMESCOPE();
   size_t NumDevices = PM->getNumDevices();
diff --git a/libomptarget/src/private.h b/libomptarget/src/private.h
index 607c2a0..d569f2a 100644
--- a/libomptarget/src/private.h
+++ b/libomptarget/src/private.h
@@ -38,115 +38,6 @@
 
 extern void handleTargetOutcome(bool Success, ident_t *Loc);
 extern bool checkDeviceAndCtors(int64_t &DeviceID, ident_t *Loc);
-extern void *targetAllocExplicit(size_t Size, int DeviceNum, int Kind,
-                                 const char *Name);
-extern void targetFreeExplicit(void *DevicePtr, int DeviceNum, int Kind,
-                               const char *Name);
-extern void *targetLockExplicit(void *HostPtr, size_t Size, int DeviceNum,
-                                const char *Name);
-extern void targetUnlockExplicit(void *HostPtr, int DeviceNum,
-                                 const char *Name);
-
-// Implemented in libomp, they are called from within __tgt_* functions.
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int __kmpc_get_target_offload(void) __attribute__((weak));
-kmp_task_t *__kmpc_omp_task_alloc(ident_t *loc_ref, int32_t gtid, int32_t flags,
-                                  size_t sizeof_kmp_task_t,
-                                  size_t sizeof_shareds,
-                                  kmp_routine_entry_t task_entry)
-    __attribute__((weak));
-
-kmp_task_t *
-__kmpc_omp_target_task_alloc(ident_t *loc_ref, int32_t gtid, int32_t flags,
-                             size_t sizeof_kmp_task_t, size_t sizeof_shareds,
-                             kmp_routine_entry_t task_entry, int64_t device_id)
-    __attribute__((weak));
-
-int32_t __kmpc_omp_task_with_deps(ident_t *loc_ref, int32_t gtid,
-                                  kmp_task_t *new_task, int32_t ndeps,
-                                  kmp_depend_info_t *dep_list,
-                                  int32_t ndeps_noalias,
-                                  kmp_depend_info_t *noalias_dep_list)
-    __attribute__((weak));
-
-/**
- * The argument set that is passed from asynchronous memory copy to block
- * version of memory copy invoked in helper task
- */
-struct TargetMemcpyArgsTy {
-  /**
-   * Common attribuutes
-   */
-  void *Dst;
-  const void *Src;
-  int DstDevice;
-  int SrcDevice;
-
-  /**
-   * The flag that denotes single dimensional or rectangle dimensional copy
-   */
-  bool IsRectMemcpy;
-
-  /**
-   * Arguments for single dimensional copy
-   */
-  size_t Length;
-  size_t DstOffset;
-  size_t SrcOffset;
-
-  /**
-   * Arguments for rectangle dimensional copy
-   */
-  size_t ElementSize;
-  int NumDims;
-  const size_t *Volume;
-  const size_t *DstOffsets;
-  const size_t *SrcOffsets;
-  const size_t *DstDimensions;
-  const size_t *SrcDimensions;
-
-  /**
-   * Constructor for single dimensional copy
-   */
-  TargetMemcpyArgsTy(void *Dst, const void *Src, size_t Length,
-                     size_t DstOffset, size_t SrcOffset, int DstDevice,
-                     int SrcDevice)
-      : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
-        IsRectMemcpy(false), Length(Length), DstOffset(DstOffset),
-        SrcOffset(SrcOffset), ElementSize(0), NumDims(0), Volume(0),
-        DstOffsets(0), SrcOffsets(0), DstDimensions(0), SrcDimensions(0){};
-
-  /**
-   * Constructor for rectangle dimensional copy
-   */
-  TargetMemcpyArgsTy(void *Dst, const void *Src, size_t ElementSize,
-                     int NumDims, const size_t *Volume,
-                     const size_t *DstOffsets, const size_t *SrcOffsets,
-                     const size_t *DstDimensions, const size_t *SrcDimensions,
-                     int DstDevice, int SrcDevice)
-      : Dst(Dst), Src(Src), DstDevice(DstDevice), SrcDevice(SrcDevice),
-        IsRectMemcpy(true), Length(0), DstOffset(0), SrcOffset(0),
-        ElementSize(ElementSize), NumDims(NumDims), Volume(Volume),
-        DstOffsets(DstOffsets), SrcOffsets(SrcOffsets),
-        DstDimensions(DstDimensions), SrcDimensions(SrcDimensions){};
-};
-
-struct TargetMemsetArgsTy {
-  // Common attributes of a memset operation
-  void *Ptr;
-  int C;
-  size_t N;
-  int DeviceNum;
-
-  // no constructors defined, because this is a PoD
-};
-
-#ifdef __cplusplus
-}
-#endif
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Print out the names and properties of the arguments to each kernel
