diff --git a/res/resources.xml b/res/resources.xml
index 369155e..cc45cd4 100644
--- a/res/resources.xml
+++ b/res/resources.xml
@@ -9,6 +9,7 @@
ui/performance_editor.ui
ui/person_editor.ui
ui/person_selector.ui
+ ui/recording_editor.ui
ui/section_editor.ui
ui/window.ui
ui/work_editor.ui
diff --git a/res/ui/recording_editor.ui b/res/ui/recording_editor.ui
new file mode 100644
index 0000000..63f7d03
--- /dev/null
+++ b/res/ui/recording_editor.ui
@@ -0,0 +1,231 @@
+
+
+
+
+
+
diff --git a/src/dialogs/mod.rs b/src/dialogs/mod.rs
index 8aa65b5..f862abb 100644
--- a/src/dialogs/mod.rs
+++ b/src/dialogs/mod.rs
@@ -22,6 +22,9 @@ pub use person_editor::*;
pub mod person_selector;
pub use person_selector::*;
+pub mod recording_editor;
+pub use recording_editor::*;
+
pub mod section_editor;
pub use section_editor::*;
diff --git a/src/dialogs/recording_editor.rs b/src/dialogs/recording_editor.rs
new file mode 100644
index 0000000..5f0d045
--- /dev/null
+++ b/src/dialogs/recording_editor.rs
@@ -0,0 +1,142 @@
+use super::*;
+use crate::backend::Backend;
+use crate::database::*;
+use glib::clone;
+use gtk::prelude::*;
+use gtk_macros::get_widget;
+use std::cell::RefCell;
+use std::rc::Rc;
+use std::convert::TryInto;
+
+pub struct RecordingEditor
+where
+ F: Fn(RecordingDescription) -> () + 'static,
+{
+ backend: Rc,
+ window: gtk::Window,
+ callback: F,
+ id: i64,
+ save_button: gtk::Button,
+ work_label: gtk::Label,
+ work: RefCell