diff --git a/pkg/omf/functions/cli/omf.cli.reload.fish b/pkg/omf/functions/cli/omf.cli.reload.fish
new file mode 100644
index 0000000000000000000000000000000000000000..474622069b6572e10bb50e1a4883470c0a79cd1a
--- /dev/null
+++ b/pkg/omf/functions/cli/omf.cli.reload.fish
@@ -0,0 +1,18 @@
+function omf.cli.reload
+  if not contains -- --force $argv
+    if count (jobs) >/dev/null ^&1
+      __omf.cli.reload.job_warning
+      return 1
+    end
+  end
+  omf.reload
+end
+
+function __omf.cli.reload.job_warning
+  echo (set_color -u)"Reload aborted. There are background jobs:"(set_color normal)
+  echo
+  jobs
+  echo
+  echo "For your safety, finish all background jobs before reloading Oh My Fish."
+  echo "If you are absolutely sure of what you are doing, you can bypass this check using --force."
+end
diff --git a/pkg/omf/functions/cli/omf.cli.remove.fish b/pkg/omf/functions/cli/omf.cli.remove.fish
index 56c12d75fcd114568d5137d3b5830af79c8ecc9a..dbbec72cc1b0905186c03f7a9bf0d1cb4efac785 100644
--- a/pkg/omf/functions/cli/omf.cli.remove.fish
+++ b/pkg/omf/functions/cli/omf.cli.remove.fish
@@ -7,6 +7,7 @@ function omf.cli.remove -a name
     switch $code
     case 0
       echo (omf::em)"$name successfully removed."(omf::off)
+      omf.cli.reload
     case 1
       echo (omf::err)"$name could not be removed."(omf::off) 1^&2
     case 2
diff --git a/pkg/omf/functions/cli/omf.cli.update.fish b/pkg/omf/functions/cli/omf.cli.update.fish
index b54b65431323de26bd70141f29fdd8c10a0b3ebc..6dd290901849d6b57bd9bf6b5c8ed19274459d3f 100644
--- a/pkg/omf/functions/cli/omf.cli.update.fish
+++ b/pkg/omf/functions/cli/omf.cli.update.fish
@@ -9,4 +9,6 @@ function omf.cli.update
   for package in (omf.packages.list --installed)
     omf.packages.update $package
   end
+
+  omf.cli.reload
 end
diff --git a/pkg/omf/functions/core/omf.reload.fish b/pkg/omf/functions/core/omf.reload.fish
new file mode 100644
index 0000000000000000000000000000000000000000..55a0e5886adf8d7fe411dc39787075e8b8c32552
--- /dev/null
+++ b/pkg/omf/functions/core/omf.reload.fish
@@ -0,0 +1,11 @@
+function omf.reload -d "Reload fish process via exec(1), keeping some context"
+  set -q CI; and return 0
+
+  history --save
+  set -gx dirprev $dirprev
+  set -gx dirnext $dirnext
+  set -gx dirstack $dirstack
+  set -gx fish_greeting ''
+
+  exec fish
+end
diff --git a/pkg/omf/functions/omf.fish b/pkg/omf/functions/omf.fish
index dab97cb5e0f45cec3e61e9f590cc57e5d3d3f0cb..9acde503c164a60972c96e5876433e414f23b856 100644
--- a/pkg/omf/functions/omf.fish
+++ b/pkg/omf/functions/omf.fish
@@ -40,6 +40,9 @@ function omf -d "Oh My Fish"
     case "doctor"
       omf.cli.doctor
 
+    case "reload"
+      omf.cli.reload $arguments
+
     case "i" "install" "get"
       omf.cli.install $arguments