add expression interfaces conditionnally
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index 36e588d..031cc81 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -1,11 +1,7 @@
 import {
   createElementID,
+  getExpressionInterfaces,
 } from '../utils/common';
-import LayerExpressionInterface from '../utils/expressions/LayerInterface';
-import EffectsExpressionInterface from '../utils/expressions/EffectInterface';
-import CompExpressionInterface from '../utils/expressions/CompInterface';
-import ShapeExpressionInterface from '../utils/expressions/ShapeInterface';
-import TextExpressionInterface from '../utils/expressions/TextInterface';
 import getBlendMode from '../utils/helpers/blendModes';
 import EffectsManager from '../EffectsManager';
 
@@ -28,6 +24,15 @@
     return false;
   },
   initExpressions: function () {
+    const expressionsInterfaces = getExpressionInterfaces();
+    if (!expressionsInterfaces) {
+      return;
+    }
+    const LayerExpressionInterface = expressionsInterfaces('layer');
+    const EffectsExpressionInterface = expressionsInterfaces('effects');
+    const ShapeExpressionInterface = expressionsInterfaces('shape');
+    const TextExpressionInterface = expressionsInterfaces('text');
+    const CompExpressionInterface = expressionsInterfaces('comp');
     this.layerInterface = LayerExpressionInterface(this);
     if (this.data.hasMask && this.maskManager) {
       this.layerInterface.registerMaskInterface(this.maskManager);
diff --git a/player/js/elements/FootageElement.js b/player/js/elements/FootageElement.js
index 7f94102..8b85987 100644
--- a/player/js/elements/FootageElement.js
+++ b/player/js/elements/FootageElement.js
@@ -1,10 +1,12 @@
 import {
   extendPrototype,
 } from '../utils/functionExtensions';
+import {
+  getExpressionInterfaces,
+} from '../utils/common';
 import RenderableElement from './helpers/RenderableElement';
 import BaseElement from './BaseElement';
 import FrameElement from './helpers/FrameElement';
-import FootageInterface from '../utils/expressions/FootageInterface';
 
 function FootageElement(data, globalData, comp) {
   this.initFrame();
@@ -30,6 +32,11 @@
 };
 
 FootageElement.prototype.initExpressions = function () {
+  const expressionsInterfaces = getExpressionInterfaces();
+  if (!expressionsInterfaces) {
+    return;
+  }
+  const FootageInterface = expressionsInterfaces('footage');
   this.layerInterface = FootageInterface(this);
 };
 
diff --git a/player/js/modules/canvas.js b/player/js/modules/canvas.js
index 794412e..baa8010 100644
--- a/player/js/modules/canvas.js
+++ b/player/js/modules/canvas.js
@@ -1,13 +1,16 @@
 import lottie from './canvas_light';
 import {
   setExpressionsPlugin,
+  setExpressionInterfaces,
 } from '../utils/common';
 import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
 import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
 import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
 
 // Registering expression plugin
 setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
 expressionPropertyDecorator();
 expressionTextPropertyDecorator();
 
diff --git a/player/js/modules/full.js b/player/js/modules/full.js
index 7e42cb7..9ce6b08 100644
--- a/player/js/modules/full.js
+++ b/player/js/modules/full.js
@@ -1,6 +1,7 @@
 import lottie from './main';
 import {
   setExpressionsPlugin,
+  setExpressionInterfaces,
 } from '../utils/common';
 import { ShapeModifiers } from '../utils/shapes/ShapeModifiers';
 import TrimModifier from '../utils/shapes/TrimModifier';
@@ -16,6 +17,7 @@
   registerRenderer,
 } from '../renderers/renderersManager';
 import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
 import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
 import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
 // SVG effects
@@ -44,6 +46,7 @@
 
 // Registering expression plugin
 setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
 expressionPropertyDecorator();
 expressionTextPropertyDecorator();
 
diff --git a/player/js/modules/html.js b/player/js/modules/html.js
index 2edd77d..3e65186 100644
--- a/player/js/modules/html.js
+++ b/player/js/modules/html.js
@@ -1,8 +1,10 @@
 import lottie from './html_light';
 import {
   setExpressionsPlugin,
+  setExpressionInterfaces,
 } from '../utils/common';
 import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
 import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
 import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
 // SVG effects
@@ -18,6 +20,7 @@
 
 // Registering expression plugin
 setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
 expressionPropertyDecorator();
 expressionTextPropertyDecorator();
 registerEffect(20, SVGTintFilter, true);
diff --git a/player/js/modules/svg.js b/player/js/modules/svg.js
index 1a2140d..4c7f5df 100644
--- a/player/js/modules/svg.js
+++ b/player/js/modules/svg.js
@@ -1,8 +1,10 @@
 import lottie from './svg_light';
 import {
   setExpressionsPlugin,
+  setExpressionInterfaces,
 } from '../utils/common';
 import Expressions from '../utils/expressions/Expressions';
+import interfacesProvider from '../utils/expressions/InterfacesProvider';
 import expressionPropertyDecorator from '../utils/expressions/ExpressionPropertyDecorator';
 import expressionTextPropertyDecorator from '../utils/expressions/ExpressionTextPropertyDecorator';
 // SVG effects
@@ -18,6 +20,7 @@
 
 // Registering expression plugin
 setExpressionsPlugin(Expressions);
+setExpressionInterfaces(interfacesProvider);
 expressionPropertyDecorator();
 expressionTextPropertyDecorator();
 registerEffect(20, SVGTintFilter, true);
diff --git a/player/js/utils/common.js b/player/js/utils/common.js
index da4946d..db54dad 100644
--- a/player/js/utils/common.js
+++ b/player/js/utils/common.js
@@ -4,6 +4,7 @@
 
 let subframeEnabled = true;
 let expressionsPlugin = null;
+let expressionsInterfaces = null;
 let idPrefix = '';
 const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
 let _shouldRoundValues = false;
@@ -232,6 +233,8 @@
 const getSubframeEnabled = () => subframeEnabled;
 const setExpressionsPlugin = (value) => { expressionsPlugin = value; };
 const getExpressionsPlugin = () => expressionsPlugin;
+const setExpressionInterfaces = (value) => { expressionsInterfaces = value; };
+const getExpressionInterfaces = () => expressionsInterfaces;
 const setDefaultCurveSegments = (value) => { defaultCurveSegments = value; };
 const getDefaultCurveSegments = () => defaultCurveSegments;
 const setIdPrefix = (value) => { idPrefix = value; };
@@ -242,6 +245,8 @@
   getSubframeEnabled,
   setExpressionsPlugin,
   getExpressionsPlugin,
+  setExpressionInterfaces,
+  getExpressionInterfaces,
   setDefaultCurveSegments,
   getDefaultCurveSegments,
   isSafari,
diff --git a/player/js/utils/expressions/InterfacesProvider.js b/player/js/utils/expressions/InterfacesProvider.js
new file mode 100644
index 0000000..22accf1
--- /dev/null
+++ b/player/js/utils/expressions/InterfacesProvider.js
@@ -0,0 +1,21 @@
+import LayerExpressionInterface from './LayerInterface';
+import EffectsExpressionInterface from './EffectInterface';
+import CompExpressionInterface from './CompInterface';
+import ShapeExpressionInterface from './ShapeInterface';
+import TextExpressionInterface from './TextInterface';
+import FootageInterface from './FootageInterface';
+
+var interfaces = {
+  layer: LayerExpressionInterface,
+  effects: EffectsExpressionInterface,
+  comp: CompExpressionInterface,
+  shape: ShapeExpressionInterface,
+  text: TextExpressionInterface,
+  footage: FootageInterface,
+};
+
+function getInterface(type) {
+  return interfaces[type] || null;
+}
+
+export default getInterface;