diff --git a/src/conf.c b/src/conf.c
index ee363c6..4501ccb 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -63,6 +63,7 @@ static void print_usage(char** argv) {
   LOG("Options are:");
   LOG(" -f,     --fullscreen   - Fullscreen");
   LOG(" -F,     --fps          - Limit frames per second");
+  LOG(" -V,     --vsync        - Enable vsync");
   LOG(" -d s,   --data s       - Set the data file to be s");
   LOG(" -W n                   - Set width to n");
   LOG(" -H n                   - Set height to n");
@@ -120,7 +121,8 @@ int conf_loadConfig(const char* file) {
         if(i) { gl_screen.flags |= OPENGL_AA_LINE; i = 0; }
     conf_loadBool("aa_polygon", i);
     if(i) { gl_screen.flags |= OPENGL_AA_POLYGON; i = 0; }
-
+    conf_loadBool("vsync", i);
+    if(i) { gl_screen..flags |= OPENG_VSYNC; i = 0; }
     /* FPS. */
     conf_loadBool("showfps", show_fps);
     conf_loadInt("maxfps", max_fps);
@@ -211,6 +213,7 @@ void conf_parseCLI(int argc, char** argv) {
   static struct option long_options[] = {
     { "fullscreen",     no_argument,        0,  'f' },
     { "fps",            required_argument,  0,  'F' },
+    { "vysnc",          no_argument,        0,  'V' },
     { "data",           required_argument,  0,  'd' },
     { "joystick",       required_argument,  0,  'j' },
     { "Joystick",       required_argument,  0,  'J' },
@@ -227,7 +230,7 @@ void conf_parseCLI(int argc, char** argv) {
   int c = 0;
 
   while((c = getopt_long(argc, argv,
-          "fF:d:j:J:W:H:MSm:s:Ghv",
+          "fF:Vd:j:J:W:H:MSm:s:Ghv",
           long_options, &option_index)) != -1) {
     switch(c) {
     case 'f':
@@ -236,6 +239,9 @@ void conf_parseCLI(int argc, char** argv) {
     case 'F':
       max_fps = atoi(optarg);
       break;
+    case 'V':
+      gl_screen.flags |= OPENGL_VSYNC;
+      break;
     case 'd':
       data = strdup(optarg);
       break;
diff --git a/src/opengl.c b/src/opengl.c
index 1681b65..d45e665 100644
--- a/src/opengl.c
+++ b/src/opengl.c
@@ -871,6 +871,8 @@ int gl_init(void) {
 
   /* Set opengl flags. */
   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); /* Ideally want double buffering. */
+  if(gl_has(OPENGL_VSYNC))
+    SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
 
   /* Get available fullscreen modes. */
   if(gl_has(OPENGL_FULLSCREEN)) {
diff --git a/src/opengl.h b/src/opengl.h
index 02c8bf4..477e3c0 100644
--- a/src/opengl.h
+++ b/src/opengl.h
@@ -25,8 +25,9 @@
 #define OPENGL_AA_POINT     (1<<2)    /**< Antialiasing points. */
 #define OPENGL_AA_LINE      (1<<3)    /**< Antialiasing lines. */
 #define OPENGL_AA_POLYGON   (1<<4)    /**< Antialiasing polygons. */
-#define OPENGL_FRAG_SHADER  (1<<5)    /**< Fragment shaders. */
-#define OPENGL_VERT_SHADER  (1<<6)    /**< Vertex shaders. */
+#define OPENGL_VSYNC        (1<<5)    /**< Sync to monitor vertical refresh rate. */
+#define OPENGL_FRAG_SHADER  (1<<6)    /**< Fragment shaders. */
+#define OPENGL_VERT_SHADER  (1<<7)    /**< Vertex shaders. */
 #define gl_has(f)           (gl_screen.flags & (f)) /**< Check for the flag. */
 
 /**