diff --git a/Content/MoCapMap.umap b/Content/MoCapMap.umap
index 3a130633790a52cf2098f82ea526f22a54d7b645..fa980d12c8ca88674f142a6b60b51c15e1d576a6 100644
--- a/Content/MoCapMap.umap
+++ b/Content/MoCapMap.umap
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:9a1540b30dea1f08211b890e124aba4d3bef862ea82618770c9118f567cb2e8d
-size 35280
+oid sha256:c991a894a005d173fbb1cae58880ae8ba8db5eb42cb65fad7bb81bca9cd119a4
+size 35283
diff --git a/Content/SaveSequenceAnimBP.uasset b/Content/SaveSequenceAnimBP.uasset
index 7bc7422aa8cfdec64e066f412aec4ee49d20e50b..a0fd833ee3dee7011f0ebccb37372b340ecf274a 100644
--- a/Content/SaveSequenceAnimBP.uasset
+++ b/Content/SaveSequenceAnimBP.uasset
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:05c883fe924dd31377fef6dec79b577739c1f2e050048659540953e6f30d2851
-size 206275
+oid sha256:1cc6fe736ef960476d55b66fb8dec90628b3c630dc384c80409c6d0dd4649058
+size 210290
diff --git a/Content/SaveSequenceRig.uasset b/Content/SaveSequenceRig.uasset
index 3f03ff9082ba6b67cd90341f5a2efe2199fed8ee..542c1c49342220fceeb4665c404f7e1787d561e5 100644
--- a/Content/SaveSequenceRig.uasset
+++ b/Content/SaveSequenceRig.uasset
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:ccbeedce4980c6a425a2500298b6f7424dfe0fc1ebe811591bf064c85d62981c
-size 4552248
+oid sha256:3d4d1fcbf2205b1f12b9963bfd74175a6abc8de389cf2085455519671f9d70de
+size 4922933
diff --git a/Content/bein2.uasset b/Content/bein2.uasset
new file mode 100644
index 0000000000000000000000000000000000000000..ed9f8b4d2080159633fde4c424c9f317a8e285e2
--- /dev/null
+++ b/Content/bein2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:974a53a571ca234c46f45dbe6478d6ceb5ca6c4febfcb90f223e5b93abc1c12d
+size 4894386
diff --git a/Source/MoCapPlugin/Private/MCController.cpp b/Source/MoCapPlugin/Private/MCController.cpp
index 5da59f83dd55f46f708b0f9dcee63bd267db1158..1ff679fa2aae5f70b15fb50f4c3baa69af11010c 100644
--- a/Source/MoCapPlugin/Private/MCController.cpp
+++ b/Source/MoCapPlugin/Private/MCController.cpp
@@ -529,6 +529,75 @@ void AMCController::PreprocessRecording() {
 
 	}
 
+	//---Smoothing of legs---
+	int smoothTimes = 5;
+	for (int l = 0; l < smoothTimes; l++) {
+
+		TArray<FProcessedAnimData> OldAnimData = AnimSaveState.AnimData;
+
+		for (int i = 0; i < AnimSaveState.AnimData.Num(); i++) {
+
+			FProcessedAnimData& AnimData = AnimSaveState.AnimData[i];
+			if (AnimData.IsMarker || AnimData.IsEnd) {
+				continue;
+			}
+
+			TArray<EBodyPart> BodyParts = { EBodyPart::LowerBody, EBodyPart::FootL, EBodyPart::FootR };
+			for (EBodyPart BodyPart : BodyParts) {
+
+				FVector PosRes;
+				FQuat RotRes = OldAnimData[i].SensorData.GetEntry(BodyPart)->Rot;
+				int RotNum = 1;
+
+				int window = 3;
+				int sum = 2 * window + 1;
+
+				FVector LastPos = OldAnimData[i].SensorData.GetEntry(BodyPart)->Pos;
+				FQuat LastRot = OldAnimData[i].SensorData.GetEntry(BodyPart)->Rot;
+				for (int k = 1; k < window; k++) {
+					int j = i - k;
+					if (j < 0 || OldAnimData[j].IsMarker) {
+						PosRes += ((window - k) / (float)sum) * LastPos;
+						RotRes = FQuat::Slerp(RotRes, LastRot, (float)RotNum / (float)(RotNum + (window - k)));
+						break;
+					}
+					else {
+						LastPos = OldAnimData[j].SensorData.GetEntry(BodyPart)->Pos;
+						PosRes += LastPos / (float)sum;
+						LastRot = OldAnimData[j].SensorData.GetEntry(BodyPart)->Rot;
+						RotRes = FQuat::Slerp(RotRes, LastRot, (float)RotNum / (RotNum + 1.f));
+						RotNum++;
+					}
+				}
+
+				LastPos = OldAnimData[i].SensorData.GetEntry(BodyPart)->Pos;
+				LastRot = OldAnimData[i].SensorData.GetEntry(BodyPart)->Rot;
+				for (int k = 0; k < window; k++) {
+					int j = i + k;
+					if (j >= OldAnimData.Num() || OldAnimData[j].IsMarker || OldAnimData[j].IsEnd) {
+						PosRes += ((window - k) / (float)sum) * LastPos;
+						RotRes = FQuat::Slerp(RotRes, LastRot, (float)RotNum / (float)(RotNum + (window - k)));
+						break;
+					}
+					else {
+						LastPos = OldAnimData[j].SensorData.GetEntry(BodyPart)->Pos;
+						PosRes += LastPos / (float)sum;
+						LastRot = OldAnimData[j].SensorData.GetEntry(BodyPart)->Rot;
+						RotRes = FQuat::Slerp(RotRes, LastRot, (float)RotNum / (RotNum + 1.f));
+						RotNum++;
+					}
+				}
+
+				if (BodyPart != EBodyPart::LowerBody) {
+					AnimSaveState.AnimData[i].SensorData.GetEntry(BodyPart)->Pos = PosRes;
+				}
+				AnimSaveState.AnimData[i].SensorData.GetEntry(BodyPart)->Rot = RotRes;
+
+			}
+
+		}
+	}
+
 	//---find last slow part of the gesture and scale it up---
 	
 	TArray<float> GestureSpeed;
@@ -971,6 +1040,8 @@ void AMCController::SaveAnimation() {
 	IsSavingToAnim = true;
 	AnimSaveState.WaitForAnimInstance = true;
 
+	AnimSaveState.Pawn->GetAnimInstance()->AdditionalOffsets = AdditionalOffsets;
+
 	PreprocessRecording();
 
 	AnimSaveState.Pawn->GetAnimInstance()->DoRig = true;
diff --git a/Source/MoCapPlugin/Private/MCRigUnits.cpp b/Source/MoCapPlugin/Private/MCRigUnits.cpp
index 29158ecd5ca6141cf6f2ef4cc564186ca5c777ae..bfdca9bc79f71466211d8b60e1dc48eb008d3530 100644
--- a/Source/MoCapPlugin/Private/MCRigUnits.cpp
+++ b/Source/MoCapPlugin/Private/MCRigUnits.cpp
@@ -240,4 +240,45 @@ FRigUnit_FromXYZW_Execute() {
 
 	Quat = FQuat(X, Y, Z, W);
 	
+}
+
+FRigUnit_AdditionalOffsets::FRigUnit_AdditionalOffsets() {
+
+}
+
+struct OffsetHelperEntry {
+	FName name;
+	const FRotator* rot;
+	const FVector* pos;
+	OffsetHelperEntry() { }
+	OffsetHelperEntry(const FName& name, const FRotator* rot, const FVector* pos)
+		: name(name), rot(rot), pos(pos) {}
+};
+
+FRigUnit_AdditionalOffsets_Execute() {
+	DECLARE_SCOPE_HIERARCHICAL_COUNTER_RIGUNIT()
+
+	FRigControlHierarchy* Hierarchy = ExecuteContext.GetControls();
+
+	if (Hierarchy) {
+
+		OffsetHelperEntry Offsets[] = {
+			OffsetHelperEntry("Head", &AdditionalOffsets.HeadRotOffset, &AdditionalOffsets.HeadPosOffset),
+			OffsetHelperEntry("HandL", &AdditionalOffsets.HandLRotOffset, &AdditionalOffsets.HandLPosOffset),
+			OffsetHelperEntry("HandR", &AdditionalOffsets.HandRRotOffset, &AdditionalOffsets.HandRPosOffset),
+			OffsetHelperEntry("CalfL", &AdditionalOffsets.LowerLegLRotOffset, &AdditionalOffsets.LowerLegLPosOffset),
+			OffsetHelperEntry("CalfR", &AdditionalOffsets.LowerLegRRotOffset, &AdditionalOffsets.LowerLegRPosOffset),
+			OffsetHelperEntry("LowerArmL", &AdditionalOffsets.LowerArmLRotOffset, &AdditionalOffsets.LowerArmLPosOffset),
+			OffsetHelperEntry("LowerArmR", &AdditionalOffsets.LowerArmRRotOffset, &AdditionalOffsets.LowerArmRPosOffset),
+			OffsetHelperEntry("Hip", &AdditionalOffsets.LowerBodyRotOffset, &AdditionalOffsets.LowerBodyPosOffset),
+			OffsetHelperEntry("Spine03", &AdditionalOffsets.UpperBodyRotOffset, &AdditionalOffsets.UpperBodyPosOffset)
+		};
+
+		for (const auto& Offset : Offsets) {
+			FTransform Transform = Hierarchy->GetGlobalTransform(Offset.name);
+			Transform.SetRotation((Transform.GetRotation().Rotator() + *Offset.rot).Quaternion());
+			Hierarchy->SetGlobalTransform(Offset.name, Transform);
+		}
+
+	}
 }
\ No newline at end of file
diff --git a/Source/MoCapPlugin/Public/MCAnimInstance.h b/Source/MoCapPlugin/Public/MCAnimInstance.h
index 0fbe3289dbb352e4a5b90d2687cac08dadce4c61..afd444d25ab8fb167cdcc8f632db63e3233dac46 100644
--- a/Source/MoCapPlugin/Public/MCAnimInstance.h
+++ b/Source/MoCapPlugin/Public/MCAnimInstance.h
@@ -32,6 +32,9 @@ public:
 	UPROPERTY(BlueprintReadWrite)
 	FSensorOffsets SensorOffsets;
 
+	UPROPERTY(BlueprintReadWrite)
+	FAdditionalOffsets AdditionalOffsets;
+
 	UPROPERTY(BlueprintReadWrite)
 	FBodyProportionStruct Measurements;
 
diff --git a/Source/MoCapPlugin/Public/MCController.h b/Source/MoCapPlugin/Public/MCController.h
index 0f4dab36d9ace3269e4ef48cd23584a6a035d98a..86d7f646b574a3ce5b0b14e4de9cad2be2e00d82 100644
--- a/Source/MoCapPlugin/Public/MCController.h
+++ b/Source/MoCapPlugin/Public/MCController.h
@@ -142,4 +142,7 @@ public:
 	UPROPERTY(EditAnywhere, meta = (DisplayName = "Gesture Hold Scale Excess Time", Category = "MotionCapture"))
 	float GestureHoldExcessTime = 0.f;
 
+	UPROPERTY(EditAnywhere, meta = (DisplayName = "Additional Post Processing Offsets", Category = "MotionCapture"))
+	FAdditionalOffsets AdditionalOffsets;
+
 };
diff --git a/Source/MoCapPlugin/Public/MCDefines.h b/Source/MoCapPlugin/Public/MCDefines.h
index 226ab52450d4b9fc1d7f44724355aa12c72dbf50..49400bf80a8135f10e0f4e2aa4052aab9cfacf47 100644
--- a/Source/MoCapPlugin/Public/MCDefines.h
+++ b/Source/MoCapPlugin/Public/MCDefines.h
@@ -262,6 +262,66 @@ struct FSensorOffsets {
 
 };
 
+USTRUCT(BlueprintType)
+struct FAdditionalOffsets {
+	GENERATED_BODY()
+
+	UPROPERTY(EditAnywhere)
+	FRotator HeadRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator HandLRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator HandRRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator LowerLegLRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator LowerLegRRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator LowerArmLRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator LowerArmRRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator LowerBodyRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FRotator UpperBodyRotOffset = FRotator::ZeroRotator;
+
+	UPROPERTY(EditAnywhere)
+	FVector HeadPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector HandLPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector HandRPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector LowerLegLPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector LowerLegRPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector LowerArmLPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector LowerArmRPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector LowerBodyPosOffset = FVector::ZeroVector;
+
+	UPROPERTY(EditAnywhere)
+	FVector UpperBodyPosOffset = FVector::ZeroVector;
+
+};
+
 struct FMCAppliedLength {
 	float applied = 1;
 	float original = 1;
diff --git a/Source/MoCapPlugin/Public/MCRigUnits.h b/Source/MoCapPlugin/Public/MCRigUnits.h
index 0e803b94157ea63a4d19217117f198e4d24cac6a..80edb1031f3ee31b25dbde7fb66ece2b54e7fb17 100644
--- a/Source/MoCapPlugin/Public/MCRigUnits.h
+++ b/Source/MoCapPlugin/Public/MCRigUnits.h
@@ -131,4 +131,19 @@ struct FRigUnit_FromXYZW : public FRigUnit
 	UPROPERTY(meta = (Output))
 	FQuat Quat;
 
+};
+
+USTRUCT(meta = (DisplayName = "AdditionalOffsets", PrototypeName = "AdditionalOffsets", Category = "Hierarchy", NodeColor = "0.05 0.25 0.05"))
+struct FRigUnit_AdditionalOffsets : public FRigUnitMutable
+{
+	GENERATED_BODY()
+
+	FRigUnit_AdditionalOffsets();
+
+	RIGVM_METHOD()
+	virtual void Execute(const FRigUnitContext& Context) override;
+
+	UPROPERTY(meta = (Input))
+	FAdditionalOffsets AdditionalOffsets;
+
 };
\ No newline at end of file