diff --git a/TODO b/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..81c02c59672c0219423fd9f654a8e3fad11c09b7
--- /dev/null
+++ b/TODO
@@ -0,0 +1,8 @@
+
+[ ] Friendly get/set text fns on CosmicEditor impl
+
+BUGS INTRODUCED:
+
+[ ] Font size has been changed somehow
+[ ] No cursor on readonly
+[ ] Window resizing broken
\ No newline at end of file
diff --git a/examples/readonly.rs b/examples/readonly.rs
index 7a9a79a40a55aa0a28ebec14165035dc5114471a..0840ef85bdb8536ff0ce0b28a2053d8ef8f86ae7 100644
--- a/examples/readonly.rs
+++ b/examples/readonly.rs
@@ -1,14 +1,14 @@
 use bevy::{prelude::*, window::PrimaryWindow};
 use bevy_cosmic_edit::{
-    create_cosmic_font_system, spawn_cosmic_edit, ActiveEditor, CosmicEditMeta, CosmicEditPlugin,
-    CosmicFont, CosmicFontConfig, CosmicMetrics, CosmicNode, CosmicText, CosmicTextPos,
+    cosmic_edit_set_text, ActiveEditor, CosmicAttrs, CosmicEditPlugin, CosmicEditUiBundle,
+    CosmicFontConfig, CosmicFontSystem, CosmicMetrics, CosmicText, CosmicTextPosition, ReadOnly,
 };
 use cosmic_text::AttrsOwned;
 
 fn setup(
     mut commands: Commands,
     windows: Query<&Window, With<PrimaryWindow>>,
-    mut cosmic_fonts: ResMut<Assets<CosmicFont>>,
+    mut font_system: ResMut<CosmicFontSystem>,
 ) {
     let primary_window = windows.single();
     commands.spawn(Camera2dBundle::default());
@@ -23,45 +23,56 @@ fn setup(
             ..default()
         })
         .id();
-    let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
-    let cosmic_font_config = CosmicFontConfig {
-        fonts_dir_path: None,
-        font_bytes: Some(vec![font_bytes]),
-        load_system_fonts: true,
-    };
 
-    let font_system = create_cosmic_font_system(cosmic_font_config);
-    let font_system_handle = cosmic_fonts.add(CosmicFont(font_system));
     let mut attrs = cosmic_text::Attrs::new();
     attrs = attrs.family(cosmic_text::Family::Name("Victor Mono"));
     attrs = attrs.color(cosmic_text::Color::rgb(0x94, 0x00, 0xD3));
-    let cosmic_edit_meta = CosmicEditMeta {
-        text: CosmicText::OneStyle("馃榾馃榾馃榾 x => y\nRead only widget".to_string()),
-        attrs: AttrsOwned::new(attrs),
-        text_pos: CosmicTextPos::Center,
-        bg: Color::WHITE,
-        metrics: CosmicMetrics {
+
+    //
+    let mut cosmic_edit = CosmicEditUiBundle {
+        style: Style {
+            width: Val::Percent(100.),
+            height: Val::Percent(100.),
+            ..default()
+        },
+        cosmic_attrs: CosmicAttrs(AttrsOwned::new(attrs)),
+        text_position: CosmicTextPosition::Center,
+        background_color: BackgroundColor(Color::WHITE),
+        cosmic_metrics: CosmicMetrics {
             font_size: 14.,
             line_height: 18.,
             scale_factor: primary_window.scale_factor() as f32,
         },
-        font_system_handle,
-        node: CosmicNode::Ui,
-        size: None,
-        readonly: true,
-        bg_image: None,
+        ..default()
     };
-    let cosmic_edit = spawn_cosmic_edit(&mut commands, &mut cosmic_fonts, cosmic_edit_meta);
-    commands.entity(root).add_child(cosmic_edit);
-    commands.insert_resource(ActiveEditor {
-        entity: Some(cosmic_edit),
+
+    cosmic_edit_set_text(
+        CosmicText::OneStyle("馃榾馃榾馃榾 x => y\nRead only widget".to_string()),
+        AttrsOwned::new(attrs),
+        &mut cosmic_edit.editor.0,
+        &mut font_system.0,
+    );
+
+    //
+    let mut id = None;
+    commands.entity(root).with_children(|parent| {
+        id = Some(parent.spawn(cosmic_edit).insert(ReadOnly).id());
     });
+
+    commands.insert_resource(ActiveEditor { entity: id });
 }
 
 fn main() {
+    let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf");
+    let font_config = CosmicFontConfig {
+        fonts_dir_path: None,
+        font_bytes: Some(vec![font_bytes]),
+        load_system_fonts: true,
+    };
+
     App::new()
         .add_plugins(DefaultPlugins)
-        .add_plugins(CosmicEditPlugin)
+        .add_plugins(CosmicEditPlugin { font_config })
         .add_systems(Startup, setup)
         .run();
 }
diff --git a/src/lib.rs b/src/lib.rs
index 0c5fd7ce6bc5a7a91f401493045d13510632aed0..fa35403eca6d5fdbddc8e28cc86165be3b6133a8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -19,20 +19,6 @@ use cosmic_text::{
 };
 use image::{imageops::FilterType, GenericImageView};
 
-#[derive(Clone)]
-pub struct CosmicEditUi;
-
-#[derive(Clone)]
-pub struct CosmicEditSprite {
-    pub transform: Transform,
-}
-
-#[derive(Clone)]
-pub enum CosmicNode {
-    Ui,
-    Sprite(CosmicEditSprite),
-}
-
 #[derive(Clone)]
 pub enum CosmicText {
     OneStyle(String),
@@ -66,7 +52,7 @@ impl Default for CosmicMetrics {
 }
 
 #[derive(Resource)]
-pub struct CosmicFontSystem(FontSystem);
+pub struct CosmicFontSystem(pub FontSystem);
 
 #[derive(Component)]
 pub struct ReadOnly; // tag component
@@ -85,18 +71,27 @@ impl Default for CosmicEditor {
 
 /// Adds the font system to each editor when added
 fn cosmic_editor_builder(
-    mut added_editors: Query<&mut CosmicEditor, Added<CosmicEditor>>,
+    mut added_editors: Query<(&mut CosmicEditor, &CosmicAttrs), Added<CosmicEditor>>,
     mut font_system: ResMut<CosmicFontSystem>,
 ) {
-    for mut editor in added_editors.iter_mut() {
-        editor
-            .0
-            .buffer_mut()
-            .set_text(&mut font_system.0, "", Attrs::new(), Shaping::Advanced);
+    for (mut editor, attrs) in added_editors.iter_mut() {
+        // keep old text if set
+        let mut text = get_cosmic_text(editor.0.buffer());
+
+        if text.is_empty() {
+            text = "".into();
+        }
+
+        editor.0.buffer_mut().set_text(
+            &mut font_system.0,
+            text.as_str(),
+            attrs.0.as_attrs(),
+            Shaping::Advanced,
+        );
 
         editor
             .0
-            .buffer_mut()
+            .buffer_mut() // TODO size here????
             .set_size(&mut font_system.0, 100., 100.)
     }
 }
@@ -410,9 +405,12 @@ pub fn cosmic_edit_set_text(
     editor: &mut Editor,
     font_system: &mut FontSystem,
 ) {
+    println!("SETTING TEXT");
     editor.buffer_mut().lines.clear();
     match text {
         CosmicText::OneStyle(text) => {
+            println!("ONESTYLE {:?}, {:?}", text, attrs);
+
             editor.buffer_mut().set_text(
                 font_system,
                 text.as_str(),
@@ -421,6 +419,8 @@ pub fn cosmic_edit_set_text(
             );
         }
         CosmicText::MultiStyle(lines) => {
+            println!("M-M-M-M-MULTI-STYLE");
+
             for line in lines {
                 let mut line_text = String::new();
                 let mut attrs_list = AttrsList::new(attrs.as_attrs());