diff --git a/examples/basic_sprite.rs b/examples/basic_sprite.rs
index bfdbefb28115ce1a89a059afc05b7ba2c01c572a..09073d0dd2ed969a571185079afa9414ad7c1b80 100644
--- a/examples/basic_sprite.rs
+++ b/examples/basic_sprite.rs
@@ -27,7 +27,6 @@ fn setup(
             "馃榾馃榾馃榾 x => y",
             attrs,
         ),
-        text_position: CosmicTextPosition::Center,
         sprite_bundle: SpriteBundle {
             sprite: Sprite {
                 custom_size: Some(Vec2::new(primary_window.width(), primary_window.height())),
diff --git a/examples/basic_ui.rs b/examples/basic_ui.rs
index 2584d4c57c19414a58f3c2e64d08bf754d66acbe..94eb841d7697f97b9589aa2f45bd7359f863794f 100644
--- a/examples/basic_ui.rs
+++ b/examples/basic_ui.rs
@@ -23,7 +23,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
                 vec![("Banana", attrs)],
                 attrs,
             ),
-            text_position: CosmicTextPosition::Center,
             ..default()
         },))
         .id();
diff --git a/examples/font_per_widget.rs b/examples/font_per_widget.rs
index f6f6959d825d7800134a9b529e9f8b8ba8ce5bc9..17282745303a8cd5cc5de4f2249dae72f73ab705 100644
--- a/examples/font_per_widget.rs
+++ b/examples/font_per_widget.rs
@@ -101,7 +101,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
                 lines,
                 attrs,
             ),
-            text_position: bevy_cosmic_edit::CosmicTextPosition::Center,
             ..default()
         })
         .id();
@@ -117,7 +116,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
                 "Widget 2.\nClick on me =>",
                 attrs_2,
             ),
-            text_position: CosmicTextPosition::Center,
             ..default()
         })
         .id();
diff --git a/examples/multiple_sprites.rs b/examples/multiple_sprites.rs
index 13d15f419143813b983dc5ec700b9e95ca2dc179..e8623fcaf16552907c23699ac2a987aa010fd2c3 100644
--- a/examples/multiple_sprites.rs
+++ b/examples/multiple_sprites.rs
@@ -22,7 +22,6 @@ fn setup(
     attrs = attrs.color(bevy_color_to_cosmic(Color::PURPLE));
 
     commands.spawn(CosmicEditBundle {
-        text_position: CosmicTextPosition::Center,
         fill_color: FillColor(Color::ALICE_BLUE),
         buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text(
             &mut font_system,
@@ -44,7 +43,6 @@ fn setup(
     });
 
     commands.spawn(CosmicEditBundle {
-        text_position: CosmicTextPosition::Center,
         fill_color: FillColor(Color::GRAY.with_a(0.5)),
         buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text(
             &mut font_system,
diff --git a/examples/placeholder.rs b/examples/placeholder.rs
index bc081eac7c505b91ecf1b0d5160ab98d14ef3124..82d459515548428c7a89a781ad60f275a872f56b 100644
--- a/examples/placeholder.rs
+++ b/examples/placeholder.rs
@@ -24,7 +24,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
                 CosmicEditBundle {
                     buffer: CosmicBuffer::new(&mut font_system, Metrics::new(20., 20.))
                         .with_rich_text(&mut font_system, vec![("", attrs)], attrs),
-                    text_position: CosmicTextPosition::Center,
                     ..default()
                 },
                 Placeholder::new(
diff --git a/examples/readonly.rs b/examples/readonly.rs
index b41ad9f393a78a68bc971b1911bca9f1c7a1eb52..0a76bd89f69ca32326a3256605b251a42ac6d92f 100644
--- a/examples/readonly.rs
+++ b/examples/readonly.rs
@@ -23,7 +23,6 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
     // spawn editor
     let cosmic_edit = commands
         .spawn(CosmicEditBundle {
-            text_position: CosmicTextPosition::Center,
             buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text(
                 &mut font_system,
                 "馃榾馃榾馃榾 x => y\nRead only widget",
diff --git a/src/input.rs b/src/input.rs
index 135703e4497aa9d0177dc798f167760b06595d51..9bb5477d732c52e0822f1c48d120e36e0a5019b1 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -123,7 +123,7 @@ pub(crate) fn input_mouse(
         }
 
         let (padding_x, padding_y) = match text_position {
-            CosmicTextPosition::Center => (
+            CosmicTextPosition::Center { padding: _ } => (
                 get_x_offset_center(width * scale_factor, &buffer),
                 get_y_offset_center(height * scale_factor, &buffer),
             ),
diff --git a/src/layout.rs b/src/layout.rs
index 2f6fab3a0be0ac11c20a02e92b9fc79868d8674c..f5d0bce834a9809cf2fbd15f35922136e5655fd3 100644
--- a/src/layout.rs
+++ b/src/layout.rs
@@ -46,7 +46,7 @@ pub fn set_padding(
         }
 
         padding.0 = match position {
-            CosmicTextPosition::Center => Vec2::new(
+            CosmicTextPosition::Center { padding: _ } => Vec2::new(
                 get_x_offset_center(size.0.x, &buffer) as f32,
                 get_y_offset_center(size.0.y, &buffer) as f32,
             ),
@@ -91,7 +91,7 @@ pub fn set_buffer_size(
 ) {
     for (mut buffer, mode, size, position) in query.iter_mut() {
         let padding_x = match position {
-            CosmicTextPosition::Center => 0.,
+            CosmicTextPosition::Center { padding: _ } => 0.,
             CosmicTextPosition::TopLeft { padding } => *padding as f32,
             CosmicTextPosition::Left { padding } => *padding as f32,
         };
@@ -148,8 +148,7 @@ pub fn set_x_offset(
         }
 
         let padding_x = match position {
-            // TODO: This 5 should be specified by user
-            CosmicTextPosition::Center => 5.,
+            CosmicTextPosition::Center { padding } => *padding as f32,
             CosmicTextPosition::TopLeft { padding } => *padding as f32,
             CosmicTextPosition::Left { padding } => *padding as f32,
         };
diff --git a/src/lib.rs b/src/lib.rs
index b14e0c3ccdce0ab8d9dbba7deeab214b7d979010..726f5a242712ffeace3c930240f7ae0691c553c0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -55,16 +55,17 @@ pub enum CursorConfig {
 }
 
 /// Enum representing the position of the cosmic text.
-#[derive(Clone, Component, Default)]
+#[derive(Clone, Component)]
 pub enum CosmicTextPosition {
-    #[default]
-    Center,
-    TopLeft {
-        padding: i32,
-    },
-    Left {
-        padding: i32,
-    },
+    Center { padding: i32 },
+    TopLeft { padding: i32 },
+    Left { padding: i32 },
+}
+
+impl Default for CosmicTextPosition {
+    fn default() -> Self {
+        CosmicTextPosition::Center { padding: 5 }
+    }
 }
 
 #[derive(Event, Debug)]
diff --git a/src/render.rs b/src/render.rs
index ab50243b751f5f85f590747ec68b46b5d63be4d3..78e376ed4d9c069ce0bbc773944d780dd49b0bfc 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -4,8 +4,8 @@ use image::{imageops::FilterType, GenericImageView};
 
 use crate::{
     layout::{CosmicPadding, CosmicWidgetSize},
-    CosmicBackground, CosmicBuffer, CosmicEditor, CosmicFontSystem, CursorColor, DefaultAttrs,
-    FillColor, ReadOnly, SelectionColor, XOffset,
+    CosmicBackground, CosmicBuffer, CosmicEditor, CosmicFontSystem, CosmicTextPosition,
+    CursorColor, DefaultAttrs, FillColor, ReadOnly, SelectionColor, XOffset,
 };
 
 #[derive(Resource)]
@@ -77,6 +77,7 @@ pub(crate) fn render_texture(
         &CosmicPadding,
         &XOffset,
         Option<&ReadOnly>,
+        &CosmicTextPosition,
     )>,
     mut font_system: ResMut<CosmicFontSystem>,
     mut images: ResMut<Assets<Image>>,
@@ -95,6 +96,7 @@ pub(crate) fn render_texture(
         padding,
         x_offset,
         readonly_opt,
+        position,
     ) in query.iter_mut()
     {
         // Draw background
@@ -133,6 +135,12 @@ pub(crate) fn render_texture(
             .color_opt
             .unwrap_or(cosmic_text::Color::rgb(0, 0, 0));
 
+        let min_pad = match position {
+            CosmicTextPosition::Center { padding } => *padding as f32,
+            CosmicTextPosition::TopLeft { padding } => *padding as f32,
+            CosmicTextPosition::Left { padding } => *padding as f32,
+        };
+
         let draw_closure = |x, y, w, h, color| {
             for row in 0..h as i32 {
                 for col in 0..w as i32 {
@@ -140,8 +148,7 @@ pub(crate) fn render_texture(
                         &mut pixels,
                         size.0.x as i32,
                         size.0.y as i32,
-                        // TODO: padding should draw from a user specified minumum here
-                        x + col + padding.x.max(5.) as i32 - x_offset.left as i32,
+                        x + col + padding.x.max(min_pad) as i32 - x_offset.left as i32,
                         y + row + padding.y as i32,
                         color,
                     );