diff --git a/src/coco.c b/src/coco.c
index 43feb7db1d1079826b94ecbcfcc28b60afa8f72d..ef1f12d1635c0b957ddbc4939d71108045dd48f2 100644
--- a/src/coco.c
+++ b/src/coco.c
@@ -371,6 +371,7 @@ void run_coco(int argc, char **argv)
     }
     float thresh = find_float_arg(argc, argv, "-thresh", .2);
     int cam_index = find_int_arg(argc, argv, "-c", 0);
+    int frame_skip = find_int_arg(argc, argv, "-s", 0);
 
     if(argc < 4){
         fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
@@ -384,5 +385,5 @@ void run_coco(int argc, char **argv)
     else if(0==strcmp(argv[2], "train")) train_coco(cfg, weights);
     else if(0==strcmp(argv[2], "valid")) validate_coco(cfg, weights);
     else if(0==strcmp(argv[2], "recall")) validate_coco_recall(cfg, weights);
-    else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, coco_classes, coco_labels, 80);
+    else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, coco_classes, coco_labels, 80, frame_skip);
 }
diff --git a/src/demo.c b/src/demo.c
index bd8f2c2c9427f68f12b75f1e652b1babe88df391..c9114dc61df737686f97ae83756c440acd3cef18 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -15,8 +15,8 @@
 #include "opencv2/imgproc/imgproc_c.h"
 void convert_detections(float *predictions, int classes, int num, int square, int side, int w, int h, float thresh, float **probs, box *boxes, int only_objectness);
 
-#define DELAY 5
-static int delay = DELAY;
+static int skip = 0;
+static int skipped = 0;
 
 static char **demo_names;
 static image *demo_labels;
@@ -44,7 +44,7 @@ void *fetch_in_thread(void *ptr)
     in = get_image_from_stream(cap);
     if(!in.data){
         in = disp;
-        if(delay == DELAY) error("Stream closed.");
+        if(skipped == skip) error("Stream closed.");
     }else{
         if(disp.data){
             free_image(disp);
@@ -63,7 +63,7 @@ void *detect_in_thread(void *ptr)
     float *prediction = network_predict(net, X);
 
     memcpy(predictions[demo_index], prediction, l.outputs*sizeof(float));
-    if(delay == DELAY){
+    if(skipped == skip){
         mean_arrays(predictions, FRAMES, l.outputs, avg);
     }
 
@@ -80,16 +80,14 @@ void *detect_in_thread(void *ptr)
     demo_index = (demo_index + 1)%FRAMES;
 
     draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, demo_names, demo_labels, demo_classes);
-    if(delay == 0){
-        delay = DELAY;
-    } else {
-        --delay;
-    }
+
+    skipped = (skipped + 1)%skip;
     return 0;
 }
 
-void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes)
+void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes, int frame_skip)
 {
+    skip = frame_skip;
     demo_names = names;
     demo_labels = labels;
     demo_classes = classes;
@@ -176,7 +174,7 @@ void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const ch
     }
 }
 #else
-void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes)
+void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes, int frame_skip)
 {
     fprintf(stderr, "Demo needs OpenCV for webcam images.\n");
 }
diff --git a/src/demo.h b/src/demo.h
index 1a091cd44dd9efaca16124e1482cc0f304a3b0ab..0e694bd582cf30b5969dd32c87cfa5ecc31656ad 100644
--- a/src/demo.h
+++ b/src/demo.h
@@ -2,6 +2,6 @@
 #define DEMO
 
 #include "image.h"
-void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes);
+void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, image *labels, int classes, int frame_skip);
 
 #endif
diff --git a/src/yolo.c b/src/yolo.c
index 057abcf951576b3ef678b61af91c9a38f3ad66d6..62455f2ec72cc1e5d980c70d1aa1293595b36038 100644
--- a/src/yolo.c
+++ b/src/yolo.c
@@ -372,6 +372,7 @@ void run_yolo(int argc, char **argv)
 
     float thresh = find_float_arg(argc, argv, "-thresh", .2);
     int cam_index = find_int_arg(argc, argv, "-c", 0);
+    int frame_skip = find_int_arg(argc, argv, "-s", 0);
     if(argc < 4){
         fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]);
         return;
@@ -384,5 +385,5 @@ void run_yolo(int argc, char **argv)
     else if(0==strcmp(argv[2], "train")) train_yolo(cfg, weights);
     else if(0==strcmp(argv[2], "valid")) validate_yolo(cfg, weights);
     else if(0==strcmp(argv[2], "recall")) validate_yolo_recall(cfg, weights);
-    else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, voc_names, voc_labels, 20);
+    else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, voc_names, voc_labels, 20, frame_skip);
 }