diff --git a/inc/dd.h b/inc/dd.h
index 630378d..fe0038f 100644
--- a/inc/dd.h
+++ b/inc/dd.h
@@ -157,6 +157,7 @@ typedef struct CNCDDRAW
     int guard_lines;
     int resolutions;
     int max_resolutions;
+    int refresh_rate;
     BOOL limit_bltfast;
     BOOL armadahack;
     BOOL tshack;
diff --git a/src/config.c b/src/config.c
index 231e46c..b76aece 100644
--- a/src/config.c
+++ b/src/config.c
@@ -45,6 +45,7 @@ void cfg_load()
     g_ddraw->allow_wmactivate = cfg_get_bool("allow_wmactivate", FALSE);
     g_ddraw->guard_lines = cfg_get_int("guard_lines", 200);
     g_ddraw->max_resolutions = cfg_get_int("max_resolutions", 0);
+    g_ddraw->refresh_rate = cfg_get_int("refresh_rate", 0);
     g_ddraw->limit_bltfast = cfg_get_bool("limit_bltfast", FALSE);
     g_ddraw->rgb555 = cfg_get_bool("rgb555", FALSE);
     g_ddraw->hook_peekmessage = cfg_get_bool("hook_peekmessage", FALSE);
@@ -362,6 +363,7 @@ static void cfg_create_ini()
             "fixmousehook=false\n"
             "rgb555=false\n"
             "no_dinput_hook=false\n"
+            "refresh_rate=0\n"
             "\n"
             "\n"
             "\n"
diff --git a/src/dd.c b/src/dd.c
index 9f33904..5d67a52 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -637,6 +637,12 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
     g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
     g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
 
+    if (g_ddraw->refresh_rate)
+    {
+        g_ddraw->render.mode.dmFields |= DM_DISPLAYFREQUENCY;
+        g_ddraw->render.mode.dmDisplayFrequency = g_ddraw->refresh_rate;
+    }
+
     if (!g_ddraw->windowed)
     {
         /* Making sure the chosen resolution is valid */
diff --git a/src/render_d3d9.c b/src/render_d3d9.c
index bbffb0c..29c0c26 100644
--- a/src/render_d3d9.c
+++ b/src/render_d3d9.c
@@ -115,6 +115,7 @@ BOOL d3d9_create()
             g_d3d9.params.PresentationInterval = g_ddraw->vsync ? D3DPRESENT_INTERVAL_ONE : D3DPRESENT_INTERVAL_IMMEDIATE;
             g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width;
             g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height;
+            g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_ddraw->refresh_rate;
             g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8;
             g_d3d9.params.BackBufferCount = 1;
 
@@ -160,6 +161,7 @@ BOOL d3d9_reset(BOOL windowed)
     g_d3d9.params.Windowed = windowed || g_ddraw->nonexclusive;
     g_d3d9.params.BackBufferWidth = g_d3d9.params.Windowed ? 0 : g_ddraw->render.width;
     g_d3d9.params.BackBufferHeight = g_d3d9.params.Windowed ? 0 : g_ddraw->render.height;
+    g_d3d9.params.FullScreen_RefreshRateInHz = g_d3d9.params.Windowed ? 0 : g_ddraw->refresh_rate;
     g_d3d9.params.BackBufferFormat = g_ddraw->mode.dmBitsPerPel == 16 ? D3DFMT_R5G6B5 : D3DFMT_X8R8G8B8;
 
     if (g_d3d9.device && SUCCEEDED(IDirect3DDevice9_Reset(g_d3d9.device, &g_d3d9.params)))