diff --git a/AUTHORS b/AUTHORS
index b5cc372..38ab55c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -23,6 +23,7 @@ Additional network programming:
 
 Bugfixes and improvements:
         Dirk Stoecker <fb dstoecker.de>
+        Anton Moll <anton.moll access.uzh.ch>
 
 Helps and bugfixes:
         Seth W. Klein <sk sethwklein.net>
diff --git a/c_stuff/lib/FBLE.pm b/c_stuff/lib/FBLE.pm
index 675c62e..99f4b02 100644
--- a/c_stuff/lib/FBLE.pm
+++ b/c_stuff/lib/FBLE.pm
@@ -2137,7 +2137,7 @@ sub init_app {
     # running as a stand alone app. If we're running embedded in the
     # game, we'll use whatever is already set up
     if ($application_caller eq 'stand-alone') {
-	@rcfile_data = cat_("$ENV{HOME}/.fbrc");
+        @rcfile_data = cat_("$FBHOME/rc");
 
         if ($command_line_fullscreen == 1) {
 	    $app->fullscreen;
diff --git a/c_stuff/lib/fb_stuff.pm b/c_stuff/lib/fb_stuff.pm
index 0ec861c..6a5e6a7 100644
--- a/c_stuff/lib/fb_stuff.pm
+++ b/c_stuff/lib/fb_stuff.pm
@@ -26,10 +26,10 @@ package fb_stuff;
 use fb_c_stuff;
 use fb_config;
 use Locale::gettext;
-use vars qw(@ISA @EXPORT $FPATH $FLPATH $FBLEVELS $colourblind %POS_1P %POS_2P %POS_MP $BUBBLE_SIZE $ROW_SIZE
+use vars qw(@ISA @EXPORT $FPATH $FLPATH $FBHOME $FBLEVELS $colourblind %POS_1P %POS_2P %POS_MP $BUBBLE_SIZE $ROW_SIZE
             $PI $version);
 @ISA = qw(Exporter);
-@EXPORT = qw($version $FPATH $FLPATH $colourblind $FBLEVELS %POS_1P %POS_2P %POS_MP $BUBBLE_SIZE $ROW_SIZE
+@EXPORT = qw($version $FPATH $FLPATH $colourblind $FBHOME $FBLEVELS %POS_1P %POS_2P %POS_MP $BUBBLE_SIZE $ROW_SIZE
              $PI cat_ member difference2 any every even odd sqr to_bool to_int if_ chomp_
              fold_left output append_to_file min max backtrace basename cp_af all partition ssort
              sum put_in_hash mapn mapn_ before_leaving fastuniq deep_copy stringchars t dbgnet);
@@ -152,7 +152,9 @@ $POS_2P{rp1} = $POS_2P{p2};  #- in net/lan 2p mode, use bigger graphics and posi
 	    centerpanel => { x => 149, 'y' => 190 },
 	  );
 
-$FBLEVELS = "$ENV{HOME}/.fblevels";
+$FBHOME = "$ENV{HOME}/.frozen-bubble";
+$FBLEVELS = "$FBHOME/levels";
+migrate_resource_files();
 
 $BUBBLE_SIZE = 32;
 $ROW_SIZE = $BUBBLE_SIZE * 7/8;
@@ -340,3 +342,19 @@ sub dbgnet {
         print "DBGNET: @_\n";
     }
 }
+
+sub migrate_resource_files {
+    mkdir $FBHOME;
+    my %files = (
+	"$ENV{HOME}/.fbhighlevelshistory" => "highlevelshistory",
+	"$ENV{HOME}/.fb_records" => "records",
+	"$ENV{HOME}/.fblevels" => "levels",
+	"$ENV{HOME}/.fbhighscores" => "highscores",
+	"$ENV{HOME}/.fbhighscores-mptrain" => "highscores-mptrain",
+	"$ENV{HOME}/.fbrc" => "rc"
+    );
+    foreach my $file (keys %files) {
+        -r $file or next;
+        system "mv '$file' '$FBHOME/$files{$file}'";
+    }
+}
diff --git a/doc/frozen-bubble.6 b/doc/frozen-bubble.6
index 65a2547..dd2726e 100644
--- a/doc/frozen-bubble.6
+++ b/doc/frozen-bubble.6
@@ -161,7 +161,7 @@ send it to other players
 .TP
 \fB--record \fIdirectory\fR
 specify the recording directory (normally, records are saved in
-the directory '.fb_records' down your home directory)
+the directory '.frozen-bubble/records' down your home directory)
 .TP
 \fB--auto-record\fR
 automatically record all applicable games (normally, a record is
diff --git a/frozen-bubble b/frozen-bubble
index c6bdaee..709ba50 100755
--- a/frozen-bubble
+++ b/frozen-bubble
@@ -98,13 +98,13 @@ $HISCORES_MPTRAIN_CHAINREACTION = [];
 
 my $RECORD_PROTOCOL_LEVEL = 0;
 
-$rcfile = "$ENV{HOME}/.fbrc";
+$rcfile = "$FBHOME/rc";
 my $keys_orig = $KEYS;
 eval(cat_($rcfile));
 $KEYS->{misc}{chat} or ($KEYS->{p1}, $KEYS->{p2}) = ($KEYS->{p2}, $KEYS->{p1});  #- for upgrades
 $KEYS->{misc}{$_} ||= $keys_orig->{misc}{$_} foreach keys %{$keys_orig->{misc}}; #-
-eval(cat_($hiscorefiles{levels} = "$ENV{HOME}/.fbhighscores"));
-eval(cat_($hiscorefiles{mptrain} = "$ENV{HOME}/.fbhighscores-mptrain"));
+eval(cat_($hiscorefiles{levels} = "$FBHOME/highscores"));
+eval(cat_($hiscorefiles{mptrain} = "$FBHOME/highscores-mptrain"));
 
 textdomain("frozen-bubble");
 $ENV{GETTEXT_DIRNAME} and bindtextdomain("frozen-bubble", $ENV{GETTEXT_DIRNAME});
@@ -182,7 +182,7 @@ GetOptions("fullscreen|fs!" => \$fullscreen,
  --no-echo              when sound is enabled, disable echoing each typed character with a typewriter sound
  --my-nick <nick>       for net/lan games, use this nick instead of username (max 10 chars, ASCII alphanumeric plus dash and underscore only)
  --private              when starting a net game, don't use http://hostip.info/ to retrieve your geographical position to send it to other players
- --record <dir>         specify the recording directory (normally, records are saved in the directory '$ENV{HOME}/.fb_records')
+ --record <dir>         specify the recording directory (normally, records are saved in the directory '$FBHOME/records')
  --auto-record          automatically record all applicable games (normally, a record is triggered by hitting the Print Screen key during a game)
  --comment '...'        add the comment enclosed between simple quotes to records (must not contain anything else than ASCII), it will be shown on console when playing back the record later
  --replay <file|URL>    replay the specified savegame
@@ -1708,8 +1708,8 @@ our $recordnumber = 0;
 sub save_record_if_needed {
     if (($recorddata{save} || $autorecord) && $levels{current} !~ /^\d+$/ && @{$recorddata{data}} > 1 && !$pdata{p1}{left}) {
         if (!$recorddir) {
-            print "Notice: no recorddir was specified on commandline; recording in '$ENV{HOME}/.fb_records'\n";
-            $recorddir = "$ENV{HOME}/.fb_records";
+            $recorddir = "$FBHOME/records";
+            print "Notice: no recorddir was specified on commandline; recording in '$recorddir'\n";
             mkdir $recorddir;
         }
         my $filename = sprintf("$recorddir/fb_record_%08d", $recordnumber++);
@@ -2976,8 +2976,8 @@ sub display_highscores {
                 }
             } else {
                 # this is the normal case. just load the level that the file tells us
-                if ($loaded_levelset ne "$ENV{HOME}/.fbhighlevelshistory") {
-                    load_levelset("$ENV{HOME}/.fbhighlevelshistory");
+                if ($loaded_levelset ne "$FBHOME/highlevelshistory") {
+                    load_levelset("$FBHOME/highlevelshistory");
                 }
                 open_level($high->{piclevel});
             }
@@ -5226,7 +5226,7 @@ sub handle_new_hiscores() {
     }
 }
 
-# append the new highscore to the .fbhighlevelshistory
+# append the new highscore to the $FBHOME/highlevelshistory
 sub append_highscore_level() {
 
     my $row_numb = 0;
@@ -5247,13 +5247,13 @@ sub append_highscore_level() {
         }
     }
 
-    append_to_file("$ENV{HOME}/.fbhighlevelshistory", @contents, "\n\n");
+    append_to_file("$FBHOME/highlevelshistory", @contents, "\n\n");
 }
 
 sub count_highscorehistory_levels() {
     my $cnt = 0;
     my $row_numb = 0;
-    foreach my $line (cat_("$ENV{HOME}/.fbhighlevelshistory")) {
+    foreach my $line (cat_("$FBHOME/highlevelshistory")) {
 	if ($line !~ /\S/) {
 	    if ($row_numb) {
 		$cnt++;
@@ -5847,7 +5847,7 @@ sub choose_levelset() {
     my @levelsets = sort glob("$FBLEVELS/*");
 
     if (!@levelsets && !$choose_level) {
-        # no .fblevels directory or void directory, just return and let the
+        # no $FBHOME/levels directory or void directory, just return and let the
         # game continue (means that the level editor has never been opened)
 
     } else {

