diff --git a/src/CaosDB.jl b/src/CaosDB.jl
index 2c7bcd357b715cf8be37534e7fd5ca39a8b21f7a..5cc7367f303416421582f63f2d4a75b174943393 100644
--- a/src/CaosDB.jl
+++ b/src/CaosDB.jl
@@ -216,6 +216,6 @@ include("Connection.jl")
 
 module Entity end
 
-module Transaction end
+include("Transaction.jl")
 
 end # CaosDB
diff --git a/src/Transaction.jl b/src/Transaction.jl
new file mode 100644
index 0000000000000000000000000000000000000000..00ceabc15ccb8eaaefacd7d1051f40c6ade590bd
--- /dev/null
+++ b/src/Transaction.jl
@@ -0,0 +1,53 @@
+# ** header v3.0
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2021 Indiscale GmbH <info@indiscale.com>
+# Copyright (C) 2021 Florian Spreckelsen <f.spreckelsen@indiscale.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with this program. If not, see
+# <https://www.gnu.org/licenses/>.
+#
+# ** end header
+#
+
+module Transaction
+
+using CaosDB
+
+"""
+Struct containing a pointer to the wrapped cpp transaction
+object. Meant for internal use; call
+`CaosDB.Transaction.create_transaction` to create a transaction
+object.
+"""
+mutable struct _Transaction
+    wrapped_transaction::Ptr{Cvoid}
+    function _Transaction(managed_by_julia::Bool = false)
+        trans = new()
+        if managed_by_julia
+            function f(t)
+                ccall(
+                    (:caosdb_transaction_delete_transaction, CaosDB.library_name),
+                    Cint,
+                    (Ref{_Transaction},),
+                    Ref{_Transaction}(t),
+                )
+            end
+            finalizer(f, trans)
+        end
+        return trans
+    end
+end
+
+end # Transaction