added folder watch task
diff --git a/package.json b/package.json
index 028fe99..91aac7d 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,8 @@
   ],
   "devDependencies": {
     "cheerio": "^1.0.0-rc.2",
-    "uglify-js": "^3.4.9"
+    "uglify-js": "^3.4.9",
+    "watch": "^1.0.2"
   },
   "types": "./index.d.ts",
   "license": "MIT"
diff --git a/player/js/utils/expressions/ExpressionPropertyDecorator.js b/player/js/utils/expressions/ExpressionPropertyDecorator.js
index 1266192..da0bd04 100644
--- a/player/js/utils/expressions/ExpressionPropertyDecorator.js
+++ b/player/js/utils/expressions/ExpressionPropertyDecorator.js
@@ -335,6 +335,9 @@
             var xLength = pt2[0] - pt1[0];
             var yLength = pt2[1] - pt1[1];
             var magnitude = Math.sqrt(Math.pow(xLength,2) + Math.pow(yLength,2));
+            if (magnitude === 0) {
+                return [0,0];
+            }
             var unitVector = vectorType === 'tangent' ? [xLength/magnitude, yLength/magnitude] : [-yLength/magnitude, xLength/magnitude];
             return unitVector;
         },
diff --git a/tasks/build.js b/tasks/build.js
index dcc1914..5eddd7f 100644
--- a/tasks/build.js
+++ b/tasks/build.js
@@ -4,6 +4,7 @@
 
 const rootFolder = 'player/';
 const bm_version = '5.5.3';
+const buildReducedVersion = process.argv[2] === 'reduced'
 
 function loadIndex() {
 	return new Promise((resolve, reject)=>{
@@ -135,7 +136,7 @@
 
 function buildVersions(scripts) {
 	return new Promise((resolve, reject) => {
-		const versions = [
+		let versions = [
 		{
 			fileName: 'lottie.js',
 			build: 'full',
@@ -207,6 +208,10 @@
 			process: uglifyCode
 		}];
 
+		if (buildReducedVersion) {
+			versions = versions.splice(0,1);
+		}
+
 		const buildProcesses = versions.map((version)=>{
 			return buildVersion(scripts, version)
 		})
diff --git a/tasks/watch.js b/tasks/watch.js
new file mode 100644
index 0000000..866ff62
--- /dev/null
+++ b/tasks/watch.js
@@ -0,0 +1,34 @@
+var childProcess = require('child_process');
+var watch = require('watch')
+
+function runScript(scriptPath, processArguments, callback) {
+
+    // keep track of whether callback has been invoked to prevent multiple invocations
+    var invoked = false;
+
+    var process = childProcess.fork(scriptPath, processArguments);
+
+    // listen for errors as they may prevent the exit event from firing
+    process.on('error', function (err) {
+        if (invoked) return;
+        invoked = true;
+        callback(err);
+    });
+
+    // execute the callback once the process has finished running
+    process.on('exit', function (code) {
+        if (invoked) return;
+        invoked = true;
+        var err = code === 0 ? null : new Error('exit code ' + code);
+        callback(err);
+    });
+
+}
+
+
+  watch.watchTree(`${__dirname}\\..\\player\\js\\`, function (f, curr, prev) {
+    runScript(`${__dirname}\\build.js`, ["reduced"], function (err) {
+        if (err) throw err;
+        console.log('finished running some-script.js');
+    });
+  })
\ No newline at end of file