diff --git a/README.md b/README.md
index 3cc63c8..24b7031 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@
 
 ### Option 2:
 **Or get it from the adobe store**
-https://creative.adobe.com/addons/products/12557
+https://exchange.adobe.com/creativecloud.details.12557.html
 CC 2014 and up.
 
 ## Other installation options:
diff --git a/build/player/lottie.js b/build/player/lottie.js
index 5bc2be8..a6755c8 100644
--- a/build/player/lottie.js
+++ b/build/player/lottie.js
@@ -2082,7 +2082,7 @@
     for (var i = 0; i < this.markers.length; i += 1) {
       marker = this.markers[i];
 
-      if (marker.payload && marker.payload.name === markerName) {
+      if (marker.payload && marker.payload.name.cm === markerName) {
         return marker;
       }
     }
diff --git a/index.d.ts b/index.d.ts
index a46a2eb..d27dd9e 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -1,6 +1,6 @@
 export type AnimationDirection = 1 | -1;
 export type AnimationSegment = [number, number];
-export type AnimationEventName = 'enterFrame' | 'loopComplete' | 'complete' | 'segmentStart' | 'destroy' | 'config_ready' | 'data_ready' | 'DOMLoaded' | 'error' | 'data_failed' | 'loaded_images';
+export type AnimationEventName = 'enterFrame' | 'loopComplete' | 'complete' | 'segmentStart' | 'destroy' | 'config_ready' | 'data_ready' | 'DOMLoaded' | 'error' | 'data_failed' | 'loaded_images';
 export type AnimationEventCallback<T = any> = (args: T) => void;
 
 export type AnimationItem = {
@@ -30,8 +30,8 @@
     togglePause(name?: string): void;
     destroy(name?: string): void;
     pause(name?: string): void;
-    goToAndStop(value: number, isFrame?: boolean, name?: string): void;
-    goToAndPlay(value: number, isFrame?: boolean, name?: string): void;
+    goToAndStop(value: number | string, isFrame?: boolean, name?: string): void;
+    goToAndPlay(value: number | string, isFrame?: boolean, name?: string): void;
     includeLayers(data: any): void;
     setSegment(init: number, end: number): void;
     resetSegments(forceFlag: boolean): void;
@@ -76,7 +76,9 @@
     hideOnTransparent?: boolean;
 };
 
-export type AnimationConfig<T extends 'svg' | 'canvas' | 'html' = 'svg'> = {
+export type RendererType = 'svg' | 'canvas' | 'html';
+
+export type AnimationConfig<T extends RendererType> = {
     container: Element;
     renderer?: T;
     loop?: boolean | number;
@@ -98,11 +100,11 @@
     }
 }
 
-export type AnimationConfigWithPath = AnimationConfig & {
+export type AnimationConfigWithPath<T extends RendererType> = AnimationConfig<T> & {
     path?: string;
 }
 
-export type AnimationConfigWithData = AnimationConfig & {
+export type AnimationConfigWithData<T extends RendererType> = AnimationConfig<T> & {
     animationData?: any;
 }
 
@@ -120,7 +122,7 @@
     setSpeed(speed: number, name?: string): void;
     setDirection(direction: AnimationDirection, name?: string): void;
     searchAnimations(animationData?: any, standalone?: boolean, renderer?: string): void;
-    loadAnimation(params: AnimationConfigWithPath | AnimationConfigWithData): AnimationItem;
+    loadAnimation<T extends RendererType>(params: AnimationConfigWithPath<T> | AnimationConfigWithData<T>): AnimationItem;
     destroy(name?: string): void;
     registerAnimation(element: Element, animationData?: any): void;
     setQuality(quality: string | number): void;
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 8c0a660..e86bca4 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -430,7 +430,7 @@
   var marker;
   for (var i = 0; i < this.markers.length; i += 1) {
     marker = this.markers[i];
-    if (marker.payload && marker.payload.name === markerName) {
+    if (marker.payload && marker.payload.name.cm === markerName) {
       return marker;
     }
   }
