diff --git a/packages/wm/src/app_command.rs b/packages/wm/src/app_command.rs
index ad99c8c7d..7ec1b224b 100644
--- a/packages/wm/src/app_command.rs
+++ b/packages/wm/src/app_command.rs
@@ -25,7 +25,9 @@ use crate::{
   user_config::{FloatingStateConfig, FullscreenStateConfig, UserConfig},
   windows::{
     commands::{
-      ignore_window, move_window_in_direction, move_window_to_workspace, resize_window, set_window_position, set_window_size, update_window_state
+      ignore_window, move_window_in_direction, move_window_to_workspace,
+      resize_window, set_window_position, set_window_position_to_center,
+      set_window_size, update_window_state,
     },
     traits::WindowGetters,
     WindowState,
@@ -187,8 +189,8 @@ pub enum InvokeCommand {
     #[clap(long)]
     direction: Direction,
   },
-  Resize(InvokeResizeCommand),
   Position(InvokePositionCommand),
+  Resize(InvokeResizeCommand),
   SetFloating {
     #[clap(long, default_missing_value = "true", require_equals = true, num_args = 0..=1)]
     shown_on_top: Option<bool>,
@@ -197,10 +199,10 @@ pub enum InvokeCommand {
     centered: Option<bool>,
 
     #[clap(long, allow_hyphen_values = true)]
-    x_pos: Option<LengthValue>,
+    x_pos: Option<i32>,
 
     #[clap(long, allow_hyphen_values = true)]
-    y_pos: Option<LengthValue>,
+    y_pos: Option<i32>,
 
     #[clap(long, allow_hyphen_values = true)]
     width: Option<LengthValue>,
@@ -439,24 +441,31 @@ impl InvokeCommand {
           config,
         )
       }
-      InvokeCommand::Resize(args) => {
+      InvokeCommand::Position(args) => {
         match subject_container.as_window_container() {
-          Ok(window) => resize_window(
-            window,
-            args.width.clone(),
-            args.height.clone(),
-            state,
-          ),
+          Ok(window) => {
+            match args.centered {
+              true => set_window_position_to_center(window, state),
+              false => {
+                set_window_position(
+                  window,
+                  args.x_pos.clone(),
+                  args.y_pos.clone(),
+                  state,
+                )
+              }
+            }
+
+          },
           _ => Ok(()),
         }
       }
-      InvokeCommand::Position(args) => {
+      InvokeCommand::Resize(args) => {
         match subject_container.as_window_container() {
-          Ok(window) => set_window_position(
+          Ok(window) => resize_window(
             window,
-            args.centered,
-            args.x_pos.clone(),
-            args.y_pos.clone(),
+            args.width.clone(),
+            args.height.clone(),
             state,
           ),
           _ => Ok(()),
@@ -488,18 +497,23 @@ impl InvokeCommand {
           )?;
 
           if width.is_some() || height.is_some() {
-            set_window_size(window.clone(),
-            width.clone(),
-            height.clone(),
-            state)?;
+            set_window_size(
+              window.clone(),
+              width.clone(),
+              height.clone(),
+              state,
+            )?;
           }
 
-          if is_centered || x_pos.is_some() || y_pos.is_some() {
+          if is_centered {
+            set_window_position_to_center(window, state)?;
+          } else if x_pos.is_some() || y_pos.is_some() {
             set_window_position(
               window.clone(), 
-              is_centered,
-            x_pos.clone(),
-            y_pos.clone(), state)?;  
+              x_pos.clone(),
+              y_pos.clone(), 
+              state,
+            )?;                
           }
 
           Ok(())
@@ -854,8 +868,8 @@ pub struct InvokePositionCommand {
   centered: bool,
 
   #[clap(long, allow_hyphen_values = true)]
-  x_pos: Option<LengthValue>,
+  x_pos: Option<i32>,
 
   #[clap(long, allow_hyphen_values = true)]
-  y_pos: Option<LengthValue>,
+  y_pos: Option<i32>,
 }
\ No newline at end of file
diff --git a/packages/wm/src/windows/commands/set_window_position.rs b/packages/wm/src/windows/commands/set_window_position.rs
index 5224d6398..8985d3b29 100644
--- a/packages/wm/src/windows/commands/set_window_position.rs
+++ b/packages/wm/src/windows/commands/set_window_position.rs
@@ -1,87 +1,61 @@
 use anyhow::Context;
 
 use crate::{
-  common::{LengthValue, Rect},
+  common::Rect,
   containers::{
     traits::{CommonGetters, PositionGetters},
     WindowContainer,
   },
   windows::{
-    traits::WindowGetters, NonTilingWindow, WindowState,
+    traits::WindowGetters, WindowState,
   },
   wm_state::WmState,
 };
 
 pub fn set_window_position(
   window: WindowContainer,
-  centered: bool,
-  target_x_pos: Option<LengthValue>,
-  target_y_pos: Option<LengthValue>,
+  target_x_pos: Option<i32>,
+  target_y_pos: Option<i32>,
   state: &mut WmState,
 ) -> anyhow::Result<()> {
-  match window {
-    WindowContainer::TilingWindow(_) => {
-      return Ok(());
-    }
-    WindowContainer::NonTilingWindow(window) => {
-      if matches!(window.state(), WindowState::Floating(_)) {
-        set_floating_window_position(
-          window,
-          centered,
-          target_x_pos,
-          target_y_pos,
-          state,
-        )?;
-      }
-    }
+  if matches!(window.state(), WindowState::Floating(_)) {
+    let window_rect = window.floating_placement();
+    let new_x_pos = target_x_pos.unwrap_or(window_rect.x());
+    let new_y_pos = target_y_pos.unwrap_or(window_rect.y());
+    window.set_floating_placement(Rect::from_xy(
+      new_x_pos,
+      new_y_pos,
+      window.floating_placement().width(),
+      window.floating_placement().height(),
+    ));
+  
+    state
+      .pending_sync
+      .containers_to_redraw
+      .push(window.clone().into());
   }
 
   Ok(())
 }
 
-fn set_floating_window_position(
-  window: NonTilingWindow,
-  centered: bool,
-  target_x_pos: Option<LengthValue>,
-  target_y_pos: Option<LengthValue>,
+pub fn set_window_position_to_center(
+  window: WindowContainer,
   state: &mut WmState,
 ) -> anyhow::Result<()> {
-  let window_rect = window.floating_placement();
-
-  match centered {
-    true => {
+  if matches!(window.state(), WindowState::Floating(_)) {
+    let window_rect = window.floating_placement();
       let workspace =
       window.workspace().context("no workspace find.")?;
       window.set_floating_placement(
         window_rect
         .translate_to_center(&workspace.to_rect()?),
-      )         
-    },
-    false => {
-      let monitor = window.monitor().context("No monitor")?;
-      let monitor_rect = monitor.to_rect()?;
-    
-      let target_x_pos_px = target_x_pos
-      .map(|target_x_pos| target_x_pos.to_px(monitor_rect.x(), None));
-      let target_y_pos_px = target_y_pos
-      .map(|target_y_pos| target_y_pos.to_px(monitor_rect.y(), None));
-    
-      let new_x_pos = target_x_pos_px.unwrap_or(window_rect.x());
-      let new_y_pos = target_y_pos_px.unwrap_or(window_rect.y());
-
-      window.set_floating_placement(Rect::from_xy(
-        new_x_pos,
-        new_y_pos,
-        window.floating_placement().width(),
-        window.floating_placement().height(),
-      ));
-    }
-  }
+      );
 
-  state
+    state
     .pending_sync
     .containers_to_redraw
-    .push(window.clone().into());
+    .push(window.clone().into());    
+  }
 
   Ok(())
-}
+}
\ No newline at end of file