diff --git a/core/plugin/gtk/world_shifter.rb b/core/plugin/gtk/world_shifter.rb
index 267162ce..6ffcf6c9 100644
--- a/core/plugin/gtk/world_shifter.rb
+++ b/core/plugin/gtk/world_shifter.rb
@@ -4,6 +4,7 @@
 
 class Gtk::WorldShifter < Gtk::EventBox
   UserConfig[:gtk_accountbox_geometry] ||= 32
+  UserConfig[:gtk_last_world_slug] ||= nil
 
   def initialize
     super
@@ -15,6 +16,7 @@ def initialize
       refresh
     end
     pluggaloid_event_listener
+    restore_last_world
   end
 
   def refresh
@@ -23,6 +25,19 @@ def refresh
     modify_face
   end
 
+  def restore_last_world
+    slug = UserConfig[:gtk_last_world_slug]
+    world = Enumerator.new do |y|
+      Plugin.filtering :worlds, y
+    end.select { |w| w.slug == slug } &.first
+    Plugin.call(:world_change_current, world) if world
+  end
+
+  def save_current_world
+    world = Plugin.filtering(:world_current, nil).first
+    UserConfig[:gtk_last_world_slug] = world.slug
+  end
+
   def open_menu(event)
     @menu ||= Gtk::Menu.new.tap do |menu|
       Enumerator.new{|y|
@@ -55,15 +70,20 @@ def destroy_menu
 
   def pluggaloid_event_listener
     tag = Plugin[:gtk].handler_tag(:world_shifter) do
-      Plugin[:gtk].on_world_change_current{ refresh }
+      Plugin[:gtk].on_world_change_current do
+        refresh
+        save_current_world
+      end
       Plugin[:gtk].on_userconfig_modify do |key, newval|
         refresh if key == :world_shifter_visibility
       end
       Plugin[:gtk].on_world_after_created do |world|
         refresh
+        save_current_world
       end
       Plugin[:gtk].on_world_destroy do |world|
         refresh
+        save_current_world
       end
     end
     ssc(:destroy) do
