diff --git a/res/ui/section.ui b/res/ui/section.ui
index 2d354d1..2ba5a53 100644
--- a/res/ui/section.ui
+++ b/res/ui/section.ui
@@ -8,15 +8,28 @@
diff --git a/src/editors/performance.rs b/src/editors/performance.rs
index b54e9d0..80cd7e4 100644
--- a/src/editors/performance.rs
+++ b/src/editors/performance.rs
@@ -1,11 +1,10 @@
use crate::backend::Backend;
use crate::database::*;
use crate::selectors::{EnsembleSelector, InstrumentSelector, PersonSelector};
-use crate::widgets::{Navigator, NavigatorScreen};
+use crate::widgets::{Editor, Navigator, NavigatorScreen, Section, ButtonRow, Widget};
use gettextrs::gettext;
use glib::clone;
use gtk::prelude::*;
-use gtk_macros::get_widget;
use libadwaita::prelude::*;
use std::cell::RefCell;
use std::rc::Rc;
@@ -13,11 +12,10 @@ use std::rc::Rc;
/// A dialog for editing a performance within a recording.
pub struct PerformanceEditor {
backend: Rc,
- widget: gtk::Box,
- save_button: gtk::Button,
- person_row: libadwaita::ActionRow,
- ensemble_row: libadwaita::ActionRow,
- role_row: libadwaita::ActionRow,
+ editor: Editor,
+ person_row: ButtonRow,
+ ensemble_row: ButtonRow,
+ role_row: ButtonRow,
reset_role_button: gtk::Button,
person: RefCell