diff --git a/demo2.py b/demo2.py
index 62b931878b046ed806e2023fba4114a2a32c4ee2..321896c3ae73853ccebfe2e9a32e91c95640166e 100644
--- a/demo2.py
+++ b/demo2.py
@@ -1,6 +1,14 @@
+##############################################
+# Demo file
+# python demo2.py --- will use video
+# python demo2.py image --- will use images
+#############################################
+
 import numpy as np
 import cv2
 import pybgs as bgs
+import sys
+import glob
 
 print("OpenCV Version: {}".format(cv2.__version__))
 
@@ -65,52 +73,92 @@ algorithms.append(bgs.TwoPoints())
 algorithms.append(bgs.ViBe())
 algorithms.append(bgs.CodeBook())
 
+
+# check if we want to use the images
+image = False
+if (len(sys.argv) == 2):
+    if(sys.argv[1] == "image"):
+        image = True
+        img_folder = "dataset/frames"
+        img_array = sorted(glob.iglob(img_folder + '/*.png'))
+
 video_file = "dataset/video.avi"
 
+
 for algorithm in algorithms:
   print("Running ", algorithm.__class__)
-  
-  capture = cv2.VideoCapture(video_file)
-  while not capture.isOpened():
-    capture = cv2.VideoCapture(video_file)
-    cv2.waitKey(1000)
-    print("Wait for the header")
-
-  #pos_frame = capture.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
-  #pos_frame = capture.get(cv2.CV_CAP_PROP_POS_FRAMES)
-  pos_frame = capture.get(1)
-  while True:
-    flag, frame = capture.read()
-    
-    if flag:
-      cv2.imshow('video', frame)
+
+  if(image):
+    # loop x times as files in our folder
+    for x in range(0, len(img_array)):
+
+        # we can loop now through our array of images
+        img_path = img_array[x]
+
+        # read file into open cv and apply to algorithm to generate background model
+        img = cv2.imread(img_path)
+        img_output = algorithm.apply(img)
+        img_bgmodel = algorithm.getBackgroundModel()
+
+        # show images in python imshow window
+        cv2.imshow('image', img)
+        cv2.imshow('img_output', img_output)
+        cv2.imshow('img_bgmodel', img_bgmodel)
+
+        # we need waitKey otherwise it wont display the image
+        if 0xFF & cv2.waitKey(10) == 27:
+          break
+
+        # Comment out to save images to bg and fg folder
+        #img_bg = img_path.replace(img_folder, "output/bg")
+        #img_fg = img_path.replace(img_folder, "output/fg")
+        #cv2.imwrite(img_bg, img_bgmodel)
+        #cv2.imwrite(img_fg, img_output)
+
+        print("Frames left: " + str(len(img_array)-x))
+
+  else:
+
+      capture = cv2.VideoCapture(video_file)
+      while not capture.isOpened():
+        capture = cv2.VideoCapture(video_file)
+        cv2.waitKey(1000)
+        print("Wait for the header")
+
       #pos_frame = capture.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
       #pos_frame = capture.get(cv2.CV_CAP_PROP_POS_FRAMES)
       pos_frame = capture.get(1)
-      #print str(pos_frame)+" frames"
-      
-      img_output = algorithm.apply(frame)
-      img_bgmodel = algorithm.getBackgroundModel()
-      
-      cv2.imshow('img_output', img_output)
-      cv2.imshow('img_bgmodel', img_bgmodel)
-
-    else:
-      #capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, pos_frame-1)
-      #capture.set(cv2.CV_CAP_PROP_POS_FRAMES, pos_frame-1)
-      #capture.set(1, pos_frame-1)
-      #print "Frame is not ready"
-      cv2.waitKey(1000)
-      break
-    
-    if 0xFF & cv2.waitKey(10) == 27:
-      break
-    
-    #if capture.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) == capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
-    #if capture.get(cv2.CV_CAP_PROP_POS_FRAMES) == capture.get(cv2.CV_CAP_PROP_FRAME_COUNT):
-    #if capture.get(1) == capture.get(cv2.CV_CAP_PROP_FRAME_COUNT):
-      #break
-
-  cv2.destroyAllWindows()
+      while True:
+        flag, frame = capture.read()
+
+        if flag:
+          cv2.imshow('video', frame)
+          #pos_frame = capture.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
+          #pos_frame = capture.get(cv2.CV_CAP_PROP_POS_FRAMES)
+          pos_frame = capture.get(1)
+          #print str(pos_frame)+" frames"
+
+          img_output = algorithm.apply(frame)
+          img_bgmodel = algorithm.getBackgroundModel()
+
+          cv2.imshow('img_output', img_output)
+          cv2.imshow('img_bgmodel', img_bgmodel)
+
+        else:
+          #capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, pos_frame-1)
+          #capture.set(cv2.CV_CAP_PROP_POS_FRAMES, pos_frame-1)
+          #capture.set(1, pos_frame-1)
+          #print "Frame is not ready"
+          cv2.waitKey(1000)
+          break
+
+        if 0xFF & cv2.waitKey(10) == 27:
+          break
+
+        #if capture.get(cv2.cv.CV_CAP_PROP_POS_FRAMES) == capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT):
+        #if capture.get(cv2.CV_CAP_PROP_POS_FRAMES) == capture.get(cv2.CV_CAP_PROP_FRAME_COUNT):
+        #if capture.get(1) == capture.get(cv2.CV_CAP_PROP_FRAME_COUNT):
+          #break
 
 print("Finished")
+cv2.destroyAllWindows()