diff --git a/jni/pjproject-android/tests/automated/run_continuous.py b/jni/pjproject-android/tests/automated/run_continuous.py
new file mode 100755
index 0000000..07e45ab
--- /dev/null
+++ b/jni/pjproject-android/tests/automated/run_continuous.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+import os
+import sys
+import time
+import datetime
+import ccdash
+
+INTERVAL = 300
+DELAY = 0
+ONCE = False
+SUFFIX = ""
+FORCE = False
+
+def run_scenarios(scenarios, group):
+	# Run each scenario
+	rc = 0
+	for scenario in scenarios:
+		argv = []
+		argv.append("ccdash.py")
+		argv.append("scenario")
+		argv.append(scenario)
+		argv.append("--group")
+		argv.append(group)
+		thisrc = ccdash.main(argv)
+		if rc==0 and thisrc:
+			rc = thisrc
+	return rc
+
+
+def usage():
+	print """Periodically monitor working directory for Continuous and Nightly builds
+
+Usage:
+  run_continuous.py [options] scenario1.xml [scenario2.xml ...]
+
+options:
+  These are options which will be processed by run_continuous.py:
+
+  --delay MIN   Delay both Continuous and Nightly builds by MIN minutes. 
+  		This is useful to coordinate the build with other build 
+		machines. By default, Continuous build will be done right
+		after changes are detected, and Nightly build will be done
+		at 00:00 GMT. MIN is a float number.
+
+  --once        Just run one loop to see if anything needs to be done and
+                if so just do it once. Quit after that.
+
+  --suffix SFX  Set group suffix to SFX. For example, if SFX is "-2.x", then
+                tests will be submitted to "Nightly-2.x", "Continuous-2.x",
+		and "Experimental-2.x"
+
+  --force	Force running the test even when nothing has changed.
+"""
+	sys.exit(1)
+
+if __name__ == "__main__":
+	if len(sys.argv)<=1 or sys.argv[1]=="-h" or sys.argv[1]=="--h" or sys.argv[1]=="--help" or sys.argv[1]=="/h":
+		usage()
+
+	# Splice list
+	scenarios = []
+	i = 1
+	while i < len(sys.argv):
+		if sys.argv[i]=="--delay":
+			i = i + 1
+			if i >= len(sys.argv):
+				print "Error: missing argument"
+				sys.exit(1)
+			DELAY = float(sys.argv[i]) * 60
+			print "Delay is set to %f minute(s)" % (DELAY / 60)
+		elif sys.argv[i]=="--suffix":
+			i = i + 1
+			if i >= len(sys.argv):
+				print "Error: missing argument"
+				sys.exit(1)
+			SUFFIX = sys.argv[i]
+			print "Suffix is set to %s" % (SUFFIX)
+		elif sys.argv[i]=="--once":
+			ONCE = True
+		elif sys.argv[i]=="--force":
+			FORCE = True
+		else:
+			# Check if scenario exists
+			scenario = sys.argv[i]
+			if not os.path.exists(scenario):
+				print "Error: file " + scenario + " does not exist"
+				sys.exit(1)
+			scenarios.append(scenario)
+			print "Scenario %s added" % (scenario)
+		i = i + 1
+
+	if len(scenarios) < 1:
+		print "Error: scenario is required"
+		sys.exit(1)
+
+	# Current date
+	utc = time.gmtime(None)
+	day = utc.tm_mday
+
+	# Loop foreva
+	while True:
+		argv = []
+
+		# Anything changed recently?
+		argv.append("ccdash.py")
+		argv.append("status")
+		argv.append("-w")
+		argv.append("../..")
+		rc = ccdash.main(argv)
+
+		utc = time.gmtime(None)
+
+		if utc.tm_mday != day or rc != 0 or FORCE:
+			group = ""
+			if utc.tm_mday != day:
+				day = utc.tm_mday
+				group = "Nightly" + SUFFIX
+			elif rc != 0:
+				group = "Continuous" + SUFFIX
+			else:
+				group = "Experimental" + SUFFIX
+			if DELAY > 0:
+				print "Will run %s after %f s.." % (group, DELAY)
+				time.sleep(DELAY)
+			rc = run_scenarios(scenarios, group)
+			msg = str(datetime.datetime.now()) + \
+				  ": done running " + group + \
+				  "tests, will check again in " + str(INTERVAL) + "s.."
+			if ONCE:
+				sys.exit(0)
+		else:
+			# Nothing changed
+			msg = str(datetime.datetime.now()) + \
+				  ": No update, will check again in " + str(INTERVAL) + "s.."
+			if ONCE:
+				sys.exit(1)
+
+		print msg
+		time.sleep(INTERVAL)
+
