#include <IGESToBRep.hxx>
 #include <IGESToBRep_AlgoContainer.hxx>
 #include <IGESToBRep_ToolContainer.hxx>
+#include <BRepBuilderAPI_Transform.hxx>
 
 //=======================================================================
 //function : IGESToBRep_TopoCurve
   }
 
   IGESToBRep_BasicCurve BC(*this);
-
   // 14.05.2009 skl for OCC21131
   BC.SetModeTransfer(Standard_False);
-
   Handle(Geom_Curve) C = BC.TransferBasicCurve(start);
 
   if (C.IsNull()) {
 //  BRep_Builder B;
 //  B.UpdateVertex (V1, epsgeom);
 //  B.UpdateVertex (V2, epsgeom);
-  
-/* 14.05.2009 skl for OCC21131
-  if (start->HasTransf()) {
+  // 14.05.2009 skl for OCC21131
+  // 15.03.2011 emv for OCC22294 begin
+  Standard_Boolean bIsNeedTransf = start->IsKind(STANDARD_TYPE(IGESGeom_SplineCurve));
+  if (start->HasTransf() && bIsNeedTransf) {
     gp_Trsf  T;
     SetEpsilon(1.E-04);
     if (IGESData_ToolLocation::ConvertLocation
-       (GetEpsilon(),start->CompoundLocation(),T, GetUnitFactor())) { 
-      TopLoc_Location L(T);
-      myshape.Move(L);
+       (GetEpsilon(),start->CompoundLocation(),T, GetUnitFactor())) { 
+      //TopLoc_Location L(T);
+      BRepBuilderAPI_Transform trf(T);
+      trf.Perform(myshape);
+      if (trf.IsDone()){
+        myshape = trf.Shape();
+      }
+      //myshape.Move(L);
     }
     else {
       Message_Msg Msg1035("IGES_1035");
     }
     //AddWarning(start, "Transformation skipped (not a similarity)");
   }
-*/  
+  //15.03.2011 emv for OCC22294 end
 
   // debug mjm du 26/07/96 en attendant developpement meilleur
   // sur traitement des Wire et non des Edge dans les programmes appelant