diff --git a/Content/SaveSequenceRig.uasset b/Content/SaveSequenceRig.uasset
index cc62a6754b96431b828120ab7bee100223780218..255653dcfdab48af6ae1da0b471947ba0f69620f 100644
--- a/Content/SaveSequenceRig.uasset
+++ b/Content/SaveSequenceRig.uasset
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:4e140be55357a682f3c7ac027bc8bfa52cdc6458d4442d75231e022321eb320c
-size 5131100
+oid sha256:1270973e8c657ea0f5839472906687bded88448c7400428210b1777db48a655c
+size 5035646
diff --git a/Source/MoCapPlugin/Private/MCRigUnits.cpp b/Source/MoCapPlugin/Private/MCRigUnits.cpp
index 5c0391ce17ad190aab4f4e3a9f879f9c394c4538..4357c12f4fc554d8f6e87010f81c5131b15c4038 100644
--- a/Source/MoCapPlugin/Private/MCRigUnits.cpp
+++ b/Source/MoCapPlugin/Private/MCRigUnits.cpp
@@ -44,71 +44,161 @@ FRigUnit_ApplyFingerData_Execute() {
 		Scale = FVector(1.f, 1.f, 1.f);
 		ThumbScale = FVector(1.f, 1.f, 1.f);
 	}
-	FVector ThumbAngles_N = ThumbScale * ThumbAngles;
-	FVector IndexAngles_N = Scale * IndexAngles;
-	FVector MiddleAngles_N = Scale * MiddleAngles;
-	FVector RingAngles_N = Scale * RingAngles;
-	FVector PinkyAngles_N = Scale * PinkyAngles;
+	FVector ThumbAnglesClosed_N = ThumbScale * ThumbAnglesClosed;
+	FVector IndexAnglesClosed_N = Scale * IndexAnglesClosed;
+	FVector MiddleAnglesClosed_N = Scale * MiddleAnglesClosed;
+	FVector RingAnglesClosed_N = Scale * RingAnglesClosed;
+	FVector PinkyAnglesClosed_N = Scale * PinkyAnglesClosed;
+	FVector ThumbAnglesOpen_N = ThumbAnglesOpen;
+	FVector IndexAnglesOpen_N = IndexAnglesOpen;
+	FVector MiddleAnglesOpen_N = MiddleAnglesOpen;
+	FVector RingAnglesOpen_N = RingAnglesOpen;
+	FVector PinkyAnglesOpen_N = PinkyAnglesOpen;
 	
 	float Thumb_Index_Angle_N = Thumb_Index_Angle;
 	float Index_Middle_Angle_N = Index_Middle_Angle;
 	float Middle_Ring_Angle_N = Middle_Ring_Angle;
 	float Ring_Pinky_Angle_N = Ring_Pinky_Angle;
 
+	float ReverseFactor = 0.5f;
+	FFingerData FingerDataTransformed = FingerData;
+	FingerDataTransformed.LeftHand.Thumb = FingerDataTransformed.LeftHand.Thumb * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.LeftHand.Index = FingerDataTransformed.LeftHand.Index * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.LeftHand.Middle = FingerDataTransformed.LeftHand.Middle * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.LeftHand.Ring = FingerDataTransformed.LeftHand.Ring * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.LeftHand.Pinky = FingerDataTransformed.LeftHand.Pinky * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.RightHand.Thumb = FingerDataTransformed.RightHand.Thumb * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.RightHand.Index = FingerDataTransformed.RightHand.Index * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.RightHand.Middle = FingerDataTransformed.RightHand.Middle * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.RightHand.Ring = FingerDataTransformed.RightHand.Ring * (1.f + ReverseFactor) - ReverseFactor;
+	FingerDataTransformed.RightHand.Pinky = FingerDataTransformed.RightHand.Pinky * (1.f + ReverseFactor) - ReverseFactor;
+
 	FRigBoneHierarchy* Hierarchy = ExecuteContext.GetBones();
 	
 	if (Hierarchy) {
 
 		//CURLS
 
-		float Thumb01YAngle = ThumbAngles_N.X;
+		float Thumb01YAngleClosed = ThumbAnglesClosed_N.X;
 		if (AngleScale >= 1.f) {
-			Thumb01YAngle = -15.f;
+			Thumb01YAngleClosed = -15.f;
 		}
 
-		AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * Thumb01YAngle, Hierarchy);
-		AddRotation("thumb_01_l", FingerData.LeftHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z");
-		AddRotation("thumb_02_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Y, Hierarchy);
-		AddRotation("thumb_03_l", FingerData.LeftHand.Thumb * ThumbAngles_N.Z, Hierarchy);
-
-		AddRotation("index_01_l", FingerData.LeftHand.Index * IndexAngles_N.X, Hierarchy);
-		AddRotation("index_02_l", FingerData.LeftHand.Index * IndexAngles_N.Y, Hierarchy);
-		AddRotation("index_03_l", FingerData.LeftHand.Index * IndexAngles_N.Z, Hierarchy);
-
-		AddRotation("middle_01_l", FingerData.LeftHand.Middle * MiddleAngles_N.X, Hierarchy);
-		AddRotation("middle_02_l", FingerData.LeftHand.Middle * MiddleAngles_N.Y, Hierarchy);
-		AddRotation("middle_03_l", FingerData.LeftHand.Middle * MiddleAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.LeftHand.Thumb >= 0.f) {
+			AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy);
+			AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.X, Hierarchy, "Z");
+			AddRotation("thumb_02_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.Y, Hierarchy);
+			AddRotation("thumb_03_l", FingerDataTransformed.LeftHand.Thumb * ThumbAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			//AddRotation("thumb_01_l", FingerDataTransformed.LeftHand.Thumb * Thumb01YAngleClosed, Hierarchy);
+			//AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy, "X");
+			AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * -ThumbAnglesOpen_N.X, Hierarchy);
+			AddRotation("thumb_01_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.X, Hierarchy, "Z");
+			AddRotation("thumb_02_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.Y, Hierarchy);
+			AddRotation("thumb_03_l", (FingerDataTransformed.LeftHand.Thumb / ReverseFactor) * ThumbAnglesOpen_N.Z, Hierarchy);
+		}
 
-		AddRotation("ring_01_l", FingerData.LeftHand.Ring * RingAngles_N.X, Hierarchy);
-		AddRotation("ring_02_l", FingerData.LeftHand.Ring * RingAngles_N.Y, Hierarchy);
-		AddRotation("ring_03_l", FingerData.LeftHand.Ring * RingAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.LeftHand.Index >= 0.f) {
+			AddRotation("index_01_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.X, Hierarchy);
+			AddRotation("index_02_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.Y, Hierarchy);
+			AddRotation("index_03_l", FingerDataTransformed.LeftHand.Index * IndexAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("index_01_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("index_02_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("index_03_l", FingerDataTransformed.LeftHand.Index * IndexAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("pinky_01_l", FingerData.LeftHand.Pinky * PinkyAngles_N.X, Hierarchy);
-		AddRotation("pinky_02_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Y, Hierarchy);
-		AddRotation("pinky_03_l", FingerData.LeftHand.Pinky * PinkyAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.LeftHand.Middle >= 0.f) {
+			AddRotation("middle_01_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.X, Hierarchy);
+			AddRotation("middle_02_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.Y, Hierarchy);
+			AddRotation("middle_03_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("middle_01_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("middle_02_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("middle_03_l", FingerDataTransformed.LeftHand.Middle * MiddleAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
+		if (FingerDataTransformed.LeftHand.Ring >= 0.f) {
+			AddRotation("ring_01_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.X, Hierarchy);
+			AddRotation("ring_02_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.Y, Hierarchy);
+			AddRotation("ring_03_l", FingerDataTransformed.LeftHand.Ring * RingAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("ring_01_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("ring_02_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("ring_03_l", FingerDataTransformed.LeftHand.Ring * RingAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("thumb_01_r", FingerData.RightHand.Thumb * Thumb01YAngle, Hierarchy);
-		AddRotation("thumb_01_r", FingerData.RightHand.Thumb * ThumbAngles_N.X, Hierarchy, "Z");
-		AddRotation("thumb_02_r", FingerData.RightHand.Thumb * ThumbAngles_N.Y, Hierarchy);
-		AddRotation("thumb_03_r", FingerData.RightHand.Thumb * ThumbAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.LeftHand.Pinky >= 0.f) {
+			AddRotation("pinky_01_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.X, Hierarchy);
+			AddRotation("pinky_02_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.Y, Hierarchy);
+			AddRotation("pinky_03_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("pinky_01_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("pinky_02_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("pinky_03_l", FingerDataTransformed.LeftHand.Pinky * PinkyAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("index_01_r", FingerData.RightHand.Index * IndexAngles_N.X, Hierarchy);
-		AddRotation("index_02_r", FingerData.RightHand.Index * IndexAngles_N.Y, Hierarchy);
-		AddRotation("index_03_r", FingerData.RightHand.Index * IndexAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.RightHand.Thumb >= 0.f) {
+			AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * Thumb01YAngleClosed, Hierarchy);
+			AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.X, Hierarchy, "Z");
+			AddRotation("thumb_02_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.Y, Hierarchy);
+			AddRotation("thumb_03_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * Thumb01YAngleClosed, Hierarchy);
+			AddRotation("thumb_01_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.X / ReverseFactor, Hierarchy, "Z");
+			AddRotation("thumb_02_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("thumb_03_r", FingerDataTransformed.RightHand.Thumb * ThumbAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("middle_01_r", FingerData.RightHand.Middle * MiddleAngles_N.X, Hierarchy);
-		AddRotation("middle_02_r", FingerData.RightHand.Middle * MiddleAngles_N.Y, Hierarchy);
-		AddRotation("middle_03_r", FingerData.RightHand.Middle * MiddleAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.RightHand.Index >= 0.f) {
+			AddRotation("index_01_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.X, Hierarchy);
+			AddRotation("index_02_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.Y, Hierarchy);
+			AddRotation("index_03_r", FingerDataTransformed.RightHand.Index * IndexAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("index_01_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("index_02_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("index_03_r", FingerDataTransformed.RightHand.Index * IndexAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("ring_01_r", FingerData.RightHand.Ring * RingAngles_N.X, Hierarchy);
-		AddRotation("ring_02_r", FingerData.RightHand.Ring * RingAngles_N.Y, Hierarchy);
-		AddRotation("ring_03_r", FingerData.RightHand.Ring * RingAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.RightHand.Middle >= 0.f) {
+			AddRotation("middle_01_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.X, Hierarchy);
+			AddRotation("middle_02_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.Y, Hierarchy);
+			AddRotation("middle_03_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("middle_01_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("middle_02_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("middle_03_r", FingerDataTransformed.RightHand.Middle * MiddleAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
-		AddRotation("pinky_01_r", FingerData.RightHand.Pinky * PinkyAngles_N.X, Hierarchy);
-		AddRotation("pinky_02_r", FingerData.RightHand.Pinky * PinkyAngles_N.Y, Hierarchy);
-		AddRotation("pinky_03_r", FingerData.RightHand.Pinky * PinkyAngles_N.Z, Hierarchy);
+		if (FingerDataTransformed.RightHand.Ring >= 0.f) {
+			AddRotation("ring_01_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.X, Hierarchy);
+			AddRotation("ring_02_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.Y, Hierarchy);
+			AddRotation("ring_03_r", FingerDataTransformed.RightHand.Ring * RingAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("ring_01_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("ring_02_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("ring_03_r", FingerDataTransformed.RightHand.Ring* RingAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
+		if (FingerDataTransformed.RightHand.Pinky >= 0.f) {
+			AddRotation("pinky_01_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.X, Hierarchy);
+			AddRotation("pinky_02_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.Y, Hierarchy);
+			AddRotation("pinky_03_r", FingerDataTransformed.RightHand.Pinky * PinkyAnglesClosed_N.Z, Hierarchy);
+		}
+		else {
+			AddRotation("pinky_01_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.X / ReverseFactor, Hierarchy);
+			AddRotation("pinky_02_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.Y / ReverseFactor, Hierarchy);
+			AddRotation("pinky_03_r", FingerDataTransformed.RightHand.Pinky* PinkyAnglesOpen_N.Z / ReverseFactor, Hierarchy);
+		}
 
 		//SPLAYS
 
diff --git a/Source/MoCapPlugin/Public/MCDefines.h b/Source/MoCapPlugin/Public/MCDefines.h
index 49400bf80a8135f10e0f4e2aa4052aab9cfacf47..bf94618b6a98a87fa31917dc1fee75c206486a17 100644
--- a/Source/MoCapPlugin/Public/MCDefines.h
+++ b/Source/MoCapPlugin/Public/MCDefines.h
@@ -374,4 +374,39 @@ public:
 	UPROPERTY(BlueprintReadWrite)
 	bool loaded = false;
 
+};
+
+USTRUCT(BlueprintType)
+struct FFingerAngles {
+	GENERATED_BODY()
+
+public:
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	FVector Thumb;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	FVector Index;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	FVector Middle;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	FVector Ring;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	FVector Pinky;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	float Thumb_Index;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	float Index_Middle;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	float Middle_Ring;
+
+	UPROPERTY(EditAnywhere, BlueprintReadWrite)
+	float Ring_Pinky;
+
 };
\ No newline at end of file
diff --git a/Source/MoCapPlugin/Public/MCRigUnits.h b/Source/MoCapPlugin/Public/MCRigUnits.h
index 80edb1031f3ee31b25dbde7fb66ece2b54e7fb17..06b49ad4118d2f52733c3951f825142e9ae2c619 100644
--- a/Source/MoCapPlugin/Public/MCRigUnits.h
+++ b/Source/MoCapPlugin/Public/MCRigUnits.h
@@ -45,19 +45,34 @@ struct FRigUnit_ApplyFingerData : public FRigUnitMutable
 	FFingerData FingerData;
 
 	UPROPERTY(meta = (Input))
-	FVector ThumbAngles;
+	FVector ThumbAnglesOpen;
 
 	UPROPERTY(meta = (Input))
-	FVector IndexAngles;
+	FVector IndexAnglesOpen;
 
 	UPROPERTY(meta = (Input))
-	FVector MiddleAngles;
+	FVector MiddleAnglesOpen;
 
 	UPROPERTY(meta = (Input))
-	FVector RingAngles;
+	FVector RingAnglesOpen;
 
 	UPROPERTY(meta = (Input))
-	FVector PinkyAngles;
+	FVector PinkyAnglesOpen;
+
+	UPROPERTY(meta = (Input))
+	FVector ThumbAnglesClosed;
+
+	UPROPERTY(meta = (Input))
+	FVector IndexAnglesClosed;
+
+	UPROPERTY(meta = (Input))
+	FVector MiddleAnglesClosed;
+
+	UPROPERTY(meta = (Input))
+	FVector RingAnglesClosed;
+
+	UPROPERTY(meta = (Input))
+	FVector PinkyAnglesClosed;
 
 	UPROPERTY(meta = (Input))
 	float Thumb_Index_Angle;