diff --git a/.gitignore b/.gitignore
index 065bdf13061cc953cc71207f720fbb8ec853e8a6..cbe1049b8e8b2cc69853e8f7e30c730a68ba560f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 /.idea
 *.pyc
-node_modules/*
\ No newline at end of file
+node_modules/*
+npm-debug.log
diff --git a/dist/reactComponents/Slider.jsx b/dist/reactComponents/Slider.jsx
index 7a1ed49ccc46caf78ad76bbc50937ad7e86eea48..4d74c927e81c6b2a07b877798c0f74f18b8e5729 100644
--- a/dist/reactComponents/Slider.jsx
+++ b/dist/reactComponents/Slider.jsx
@@ -15,8 +15,10 @@ var __extends = (this && this.__extends) || (function () {
 Object.defineProperty(exports, "__esModule", { value: true });
 var reactAndRedux_1 = require("./reactAndRedux");
 var makeGuid_1 = require("../util/makeGuid");
+var get_browser_1 = require("../util/get_browser");
 var Slider = (function (_super) {
     __extends(Slider, _super);
+    // onchange: (evt: ChangeEvent<HTMLInputElement>) => any;
     function Slider(props, context) {
         var _this = _super.call(this, props, context) || this;
         _this.uid = makeGuid_1.default();
@@ -27,6 +29,7 @@ var Slider = (function (_super) {
         return _this;
     }
     Slider.prototype.componentDidMount = function () {
+        var _this = this;
         this.el = document.getElementById(this.uid);
         this.minVal = parseFloat(this.el.min);
         this.maxVal = parseFloat(this.el.max);
@@ -34,6 +37,12 @@ var Slider = (function (_super) {
         this.startButton = document.getElementById(this.startUid);
         this.endButton = document.getElementById(this.endUid);
         this.intervalSelect = document.getElementById(this.intervalUid);
+        if (get_browser_1.get_browser().name.toUpperCase().indexOf('IE') > -1) {
+            console.log('is ie');
+            this.el.onchange = function (e) {
+                _this.props.change(parseFloat(e.target['value']));
+            };
+        }
     };
     Slider.prototype.updateRunning = function () {
         this.startButton.disabled = this.running;
diff --git a/dist/reactComponents/Slider.jsx.map b/dist/reactComponents/Slider.jsx.map
index 477b7413deebb7a6e7596582779fd598c325ad96..8824597aa0c7c1c0dab1ccdc0c09299ca91c93b5 100644
--- a/dist/reactComponents/Slider.jsx.map
+++ b/dist/reactComponents/Slider.jsx.map
@@ -1 +1 @@
-{"version":3,"file":"Slider.jsx","sourceRoot":"","sources":["../../src/reactComponents/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\n\r\nimport {React} from './reactAndRedux';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\n\r\n\r\n\r\n\r\nexport interface iSlider {\r\n    change: (d: number) => any;\r\n    steps?: number;\r\n    animate?: boolean;\r\n    value?: number;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, null>{\r\n    uid: string;\r\n    startUid: string;\r\n    endUid: string;\r\n    intervalUid: string;\r\n    el: HTMLInputElement;\r\n    startButton: HTMLButtonElement;\r\n    endButton: HTMLButtonElement;\r\n    intervalSelect: HTMLSelectElement;\r\n    interval: number;\r\n    running: boolean;\r\n    minVal: number;\r\n    maxVal: number;\r\n    step: number;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.endUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.endButton = document.getElementById(this.endUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n    }\r\n\r\n    updateRunning() {\r\n\r\n        this.startButton.disabled = this.running;\r\n        this.el.disabled = this.running;\r\n        this.endButton.disabled = !this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n            console.log(parseFloat(this.el.value));\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate(){\r\n        if (this.running){\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n\r\n    render() {\r\n\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {this.props.change(parseFloat(evt.target.value))},\r\n            style: {width: '100%'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value ? this.props.value.toString(): '0',\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps){\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value){\r\n            delete attrs.defaultValue;\r\n            // attrs['value'] = this.props.value.toString()\r\n        } else {\r\n            delete attrs.value;\r\n            // attrs['defaultValue'] = \"0\";\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let intervalSelect = null;\r\n\r\n        if (this.props.animate) {\r\n            start = <button id={this.startUid} onClick={() => {\r\n                this.startAnimate()\r\n            }}>Start</button>;\r\n\r\n            stop = <button id={this.endUid} onClick={() => {\r\n                this.stopAnimate()\r\n            }}>Stop</button>;\r\n\r\n            intervalSelect = <span>\r\n            <label>Interval (s)</label>\r\n            <select defaultValue=\"200\" id={this.intervalUid} onChange={() => {this.restartAnimate()}}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div>\r\n             <input {...attrs}/>\r\n            {start}{stop}{intervalSelect}\r\n        </div>\r\n    }\r\n\r\n}"]}
\ No newline at end of file
+{"version":3,"file":"Slider.jsx","sourceRoot":"","sources":["../../src/reactComponents/Slider.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Created by glenn on 7/6/2017.\r\n */\r\n\r\nimport {React} from './reactAndRedux';\r\nimport makeGuid from '../util/makeGuid';\r\nimport {ChangeEvent} from \"react\";\r\nimport {get_browser} from '../util/get_browser';\r\n\r\nexport interface iSlider {\r\n    change: (d: number) => any;\r\n    steps?: number;\r\n    animate?: boolean;\r\n    value?: number;\r\n}\r\n\r\nexport class Slider extends React.Component<iSlider, null>{\r\n    uid: string;\r\n    startUid: string;\r\n    endUid: string;\r\n    intervalUid: string;\r\n    el: HTMLInputElement;\r\n    startButton: HTMLButtonElement;\r\n    endButton: HTMLButtonElement;\r\n    intervalSelect: HTMLSelectElement;\r\n    interval: number;\r\n    running: boolean;\r\n    minVal: number;\r\n    maxVal: number;\r\n    step: number;\r\n    // onchange: (evt: ChangeEvent<HTMLInputElement>) => any;\r\n\r\n    constructor(props: iSlider, context: Object) {\r\n        super(props, context);\r\n        this.uid = makeGuid();\r\n        this.startUid = makeGuid();\r\n        this.endUid = makeGuid();\r\n        this.intervalUid = makeGuid();\r\n        this.running = false;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.el = document.getElementById(this.uid) as HTMLInputElement;\r\n        this.minVal = parseFloat(this.el.min);\r\n        this.maxVal = parseFloat(this.el.max);\r\n        this.step = parseFloat(this.el.step);\r\n        this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;\r\n        this.endButton = document.getElementById(this.endUid) as HTMLButtonElement;\r\n        this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;\r\n\r\n        if (get_browser().name.toUpperCase().indexOf('IE') > -1){\r\n            console.log('is ie');\r\n            this.el.onchange = (e) => {\r\n                this.props.change(parseFloat(e.target['value']))\r\n            }\r\n        }\r\n    }\r\n\r\n    updateRunning() {\r\n        this.startButton.disabled = this.running;\r\n        this.el.disabled = this.running;\r\n        this.endButton.disabled = !this.running;\r\n    }\r\n\r\n    startAnimate() {\r\n        this.running = true;\r\n        this.updateRunning();\r\n        this.interval = setInterval(() => {\r\n            let val = parseFloat(this.el.value);\r\n            val += this.step;\r\n            if (val > this.maxVal) {\r\n                val = this.minVal\r\n            }\r\n\r\n            this.el.value = val.toString();\r\n            this.props.change(val);\r\n            console.log(parseFloat(this.el.value));\r\n        }, parseInt(this.intervalSelect.value));\r\n    }\r\n\r\n    stopAnimate() {\r\n        clearInterval(this.interval);\r\n        this.running = false;\r\n        this.updateRunning();\r\n    }\r\n\r\n    restartAnimate(){\r\n        if (this.running){\r\n            this.stopAnimate();\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n    render() {\r\n\r\n        let attrs = {\r\n            id: this.uid,\r\n            min: 0,\r\n            type: 'range',\r\n            onChange: (evt: ChangeEvent<HTMLInputElement>) => {this.props.change(parseFloat(evt.target.value))},\r\n            style: {width: '100%'},\r\n            max: \"100\",\r\n            step: '0.1',\r\n            value: this.props.value ? this.props.value.toString(): '0',\r\n            defaultValue: \"0\"\r\n        };\r\n\r\n        if (this.props.steps){\r\n            attrs.max = this.props.steps.toString();\r\n            attrs.step = '1';\r\n        }\r\n\r\n        if (this.props.value){\r\n            delete attrs.defaultValue;\r\n            // attrs['value'] = this.props.value.toString()\r\n        } else {\r\n            delete attrs.value;\r\n            // attrs['defaultValue'] = \"0\";\r\n        }\r\n\r\n\r\n        let start = null;\r\n        let stop = null;\r\n        let intervalSelect = null;\r\n\r\n        if (this.props.animate) {\r\n            start = <button id={this.startUid} onClick={() => {\r\n                this.startAnimate()\r\n            }}>Start</button>;\r\n\r\n            stop = <button id={this.endUid} onClick={() => {\r\n                this.stopAnimate()\r\n            }}>Stop</button>;\r\n\r\n            intervalSelect = <span>\r\n            <label>Interval (s)</label>\r\n            <select defaultValue=\"200\" id={this.intervalUid} onChange={() => {this.restartAnimate()}}>\r\n                <option value=\"100\">0.1</option>\r\n                <option value=\"200\">0.2</option>\r\n                <option value=\"300\">0.3</option>\r\n                <option value=\"400\">0.4</option>\r\n                <option value=\"500\">0.5</option>\r\n                <option value=\"600\">0.6</option>\r\n                <option value=\"700\">0.7</option>\r\n                <option value=\"800\">0.8</option>\r\n                <option value=\"900\">0.9</option>\r\n                <option value=\"1000\">1.0</option>\r\n            </select>\r\n            </span>;\r\n        }\r\n\r\n        return <div>\r\n             <input {...attrs}/>\r\n            {start}{stop}{intervalSelect}\r\n        </div>\r\n    }\r\n\r\n}"]}
\ No newline at end of file
diff --git a/dist/util/get_browser.d.ts b/dist/util/get_browser.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b359d00bf8aaec12f94c39e677e12581a504b41b
--- /dev/null
+++ b/dist/util/get_browser.d.ts
@@ -0,0 +1,9 @@
+/**
+ * get the browser name and version
+ * @returns {{name: string; version: string}}
+ */
+export declare function get_browser(): {
+    name: string;
+    version: string;
+};
+export default get_browser;
diff --git a/dist/util/get_browser.js b/dist/util/get_browser.js
new file mode 100644
index 0000000000000000000000000000000000000000..01ecca0e02895d253b4de35a907825808c286077
--- /dev/null
+++ b/dist/util/get_browser.js
@@ -0,0 +1,30 @@
+/**
+ * get the browser name and version
+ * @returns {{name: string; version: string}}
+ */
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function get_browser() {
+    var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
+    if (/trident/i.test(M[1])) {
+        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
+        return { name: 'IE', version: (tem[1] || '') };
+    }
+    if (M[1] === 'Chrome') {
+        tem = ua.match(/\bOPR|Edge\/(\d+)/);
+        if (tem != null) {
+            return { name: 'Opera', version: tem[1] };
+        }
+    }
+    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
+    if ((tem = ua.match(/version\/(\d+)/i)) != null) {
+        M.splice(1, 1, tem[1]);
+    }
+    return {
+        name: M[0],
+        version: M[1]
+    };
+}
+exports.get_browser = get_browser;
+exports.default = get_browser;
+//# sourceMappingURL=get_browser.js.map
\ No newline at end of file
diff --git a/dist/util/get_browser.js.map b/dist/util/get_browser.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..2efb4d3d993f481b64d7bf15c48e941d3af6cd01
--- /dev/null
+++ b/dist/util/get_browser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"get_browser.js","sourceRoot":"","sources":["../../src/util/get_browser.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;AAEH;IACI,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,EAC7B,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,IAAI,EAAE,CAAC;IACvF,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAC,CAAC;IACjD,CAAC;IACD,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACpB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACnC,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IACD,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1E,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC;QACH,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACV,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;KAChB,CAAC;AACN,CAAC;AArBD,kCAqBC;AAED,kBAAe,WAAW,CAAC","sourcesContent":["/**\r\n * get the browser name and version\r\n * @returns {{name: string; version: string}}\r\n */\r\n\r\nexport function get_browser(): {name: string, version: string} {\r\n    let ua = navigator.userAgent, tem,\r\n        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\r\n    if (/trident/i.test(M[1])) {\r\n        tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n        return {name: 'IE', version: (tem[1] || '')};\r\n    }\r\n    if (M[1] === 'Chrome') {\r\n        tem = ua.match(/\\bOPR|Edge\\/(\\d+)/)\r\n        if (tem != null) {\r\n            return {name: 'Opera', version: tem[1]};\r\n        }\r\n    }\r\n    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n    if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n        M.splice(1, 1, tem[1]);\r\n    }\r\n    return {\r\n        name: M[0],\r\n        version: M[1]\r\n    };\r\n}\r\n\r\nexport default get_browser;\r\n"]}
\ No newline at end of file
diff --git a/src/reactComponents/Slider.tsx b/src/reactComponents/Slider.tsx
index e6f98f55de73285e4ef3db668547353482cb3322..17789e4ff39d52573989c45c75de962ec9d0f278 100644
--- a/src/reactComponents/Slider.tsx
+++ b/src/reactComponents/Slider.tsx
@@ -2,13 +2,10 @@
  * Created by glenn on 7/6/2017.
  */
 
-
 import {React} from './reactAndRedux';
 import makeGuid from '../util/makeGuid';
 import {ChangeEvent} from "react";
-
-
-
+import {get_browser} from '../util/get_browser';
 
 export interface iSlider {
     change: (d: number) => any;
@@ -31,6 +28,7 @@ export class Slider extends React.Component<iSlider, null>{
     minVal: number;
     maxVal: number;
     step: number;
+    // onchange: (evt: ChangeEvent<HTMLInputElement>) => any;
 
     constructor(props: iSlider, context: Object) {
         super(props, context);
@@ -49,10 +47,16 @@ export class Slider extends React.Component<iSlider, null>{
         this.startButton = document.getElementById(this.startUid) as HTMLButtonElement;
         this.endButton = document.getElementById(this.endUid) as HTMLButtonElement;
         this.intervalSelect = document.getElementById(this.intervalUid) as HTMLSelectElement;
+
+        if (get_browser().name.toUpperCase().indexOf('IE') > -1){
+            console.log('is ie');
+            this.el.onchange = (e) => {
+                this.props.change(parseFloat(e.target['value']))
+            }
+        }
     }
 
     updateRunning() {
-
         this.startButton.disabled = this.running;
         this.el.disabled = this.running;
         this.endButton.disabled = !this.running;
@@ -87,7 +91,6 @@ export class Slider extends React.Component<iSlider, null>{
         }
     }
 
-
     render() {
 
         let attrs = {
diff --git a/src/util/get_browser.ts b/src/util/get_browser.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a68dff2e29cb530dbad136f032e8aa6366200cb8
--- /dev/null
+++ b/src/util/get_browser.ts
@@ -0,0 +1,29 @@
+/**
+ * get the browser name and version
+ * @returns {{name: string; version: string}}
+ */
+
+export function get_browser(): {name: string, version: string} {
+    let ua = navigator.userAgent, tem,
+        M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
+    if (/trident/i.test(M[1])) {
+        tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
+        return {name: 'IE', version: (tem[1] || '')};
+    }
+    if (M[1] === 'Chrome') {
+        tem = ua.match(/\bOPR|Edge\/(\d+)/)
+        if (tem != null) {
+            return {name: 'Opera', version: tem[1]};
+        }
+    }
+    M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
+    if ((tem = ua.match(/version\/(\d+)/i)) != null) {
+        M.splice(1, 1, tem[1]);
+    }
+    return {
+        name: M[0],
+        version: M[1]
+    };
+}
+
+export default get_browser;