Index: mitk/Core/Algorithms/mitkImageRegistrationMethod.txx
===================================================================
--- mitk/Core/Algorithms/mitkImageRegistrationMethod.txx	(revision 15822)
+++ mitk/Core/Algorithms/mitkImageRegistrationMethod.txx	(working copy)
@@ -48,6 +48,29 @@
       typedef typename itk::Image<TPixel, VImageDimension> FixedImageType;
       typedef typename itk::Image<TPixel, VImageDimension> MovingImageType;
 
+      typename FixedImageType::Pointer fixedImage = FixedImageType::New();
+      typename MovingImageType::Pointer movingImage = itkImage1;
+      
+      mitk::CastToItkImage(m_ReferenceImage, fixedImage); 
+
+      itk::Image<TPixel, VImageDimension>::DirectionType dir = movingImage->GetDirection();
+      itk::Image<TPixel, VImageDimension>::PointType offset = movingImage->GetOrigin();
+      itk::Image<TPixel, VImageDimension>::DirectionType mdirT(dir.GetTranspose());
+      itk::Image<TPixel, VImageDimension>::PointType newoffset = offset;
+      newoffset[0] = newoffset[0] - (mdirT*offset)[0];
+      newoffset[1] = newoffset[1] - (mdirT*offset)[1];
+      newoffset[2] = newoffset[2] - (mdirT*offset)[2];
+      movingImage->SetOrigin(newoffset); 
+      
+      dir = fixedImage->GetDirection();
+      offset = fixedImage->GetOrigin();
+      itk::Image<TPixel, VImageDimension>::DirectionType fdirT(dir.GetTranspose());
+      newoffset = offset;
+      newoffset[0] = newoffset[0] - (fdirT*offset)[0];
+      newoffset[1] = newoffset[1] - (fdirT*offset)[1];
+      newoffset[2] = newoffset[2] - (fdirT*offset)[2];
+      fixedImage->SetOrigin(newoffset);
+
       typedef typename itk::Transform<double, VImageDimension, VImageDimension> TransformType;
       typedef typename itk::LinearInterpolateImageFunction<MovingImageType, double> InterpolatorType;
       typedef itk::NearestNeighborInterpolateImageFunction<MovingImageType, double> InterpolatorType2;
@@ -58,10 +81,10 @@
       typedef TransformFactory<TPixel, VImageDimension> TransformFactoryType;
       typedef typename itk::SingleValuedNonLinearOptimizer OptimizerType;
       
-      typename FixedImageType::Pointer fixedImage = FixedImageType::New();
-      typename MovingImageType::Pointer movingImage = itkImage1;
-      
-      mitk::CastToItkImage(m_ReferenceImage, fixedImage);
+//      typename FixedImageType::Pointer fixedImage = FixedImageType::New();
+//      typename MovingImageType::Pointer movingImage = itkImage1;
+//      
+//      mitk::CastToItkImage(m_ReferenceImage, fixedImage);
 
       typename MetricFactoryType::Pointer metFac = MetricFactoryType::New();
       metFac->SetMetricParameters(m_MetricParameters);
Index: mitk/QFunctionalities/QmitkRigidRegistration/QmitkRigidRegistrationSelector.ui.h
===================================================================
--- mitk/QFunctionalities/QmitkRigidRegistration/QmitkRigidRegistrationSelector.ui.h	(revision 15822)
+++ mitk/QFunctionalities/QmitkRigidRegistration/QmitkRigidRegistrationSelector.ui.h	(working copy)
@@ -34,11 +34,16 @@
     mitk::Image::Pointer fimage = dynamic_cast<mitk::Image*>(m_FixedNode->GetData());
     mitk::Image::Pointer mimage = dynamic_cast<mitk::Image*>(m_MovingNode->GetData());
     m_ImageGeometry = m_MovingNode->GetData()->GetGeometry()->Clone();
+    mitk::AffineGeometryFrame3D::Pointer m_FImageGeometry = m_FixedNode->GetData()->GetGeometry()->Clone();
+    mitk::AffineGeometryFrame3D::Pointer m_MovingGeometryCopy = m_MovingNode->GetData()->GetGeometry()->Clone();
     m_MovingGeometry = m_MovingNode->GetData()->GetGeometry();
     m_GeometryWorldToItkPhysicalTransform = mitk::Geometry3D::TransformType::New();
     GetWorldToItkPhysicalTransform(m_MovingGeometry, m_GeometryWorldToItkPhysicalTransform.GetPointer());
     m_GeometryItkPhysicalToWorldTransform = mitk::Geometry3D::TransformType::New();
     m_GeometryWorldToItkPhysicalTransform->GetInverse(m_GeometryItkPhysicalToWorldTransform);
+    GetWorldToItkPhysicalTransform(m_FixedNode->GetData()->GetGeometry(), m_GeometryWorldToItkPhysicalTransform.GetPointer());
+    m_GeometryWorldToItkPhysicalTransform->GetInverse(m_GeometryItkPhysicalToWorldTransform);
+    GetWorldToItkPhysicalTransform(m_MovingGeometry, m_GeometryWorldToItkPhysicalTransform.GetPointer());
     mitk::ImageRegistrationMethod::Pointer registration = mitk::ImageRegistrationMethod::New();
     itk::ReceptorMemberCommand<QmitkRigidRegistrationSelector>::Pointer command = itk::ReceptorMemberCommand<QmitkRigidRegistrationSelector>::New();
     command->SetCallbackFunction(this, &QmitkRigidRegistrationSelector::SetOptimizerValue);
@@ -454,14 +459,14 @@
       vtkmatrix->MultiplyPoint(center, translation);
       if (m_FixedDimension == 2)
       {
-        vtkmatrix->SetElement(0, 3, -translation[0] + m_TransformParameters->GetTransformCenterX() + translateVector[4]);
-        vtkmatrix->SetElement(1, 3, -translation[1] + m_TransformParameters->GetTransformCenterY() + translateVector[5]);
+        vtkmatrix->SetElement(0, 3, -translation[0] + center[0] + translateVector[4]);
+        vtkmatrix->SetElement(1, 3, -translation[1] + center[1] + translateVector[5]);
       }
       else if (m_FixedDimension == 3)
       {
-        vtkmatrix->SetElement(0, 3, -translation[0] + m_TransformParameters->GetTransformCenterX() + translateVector[9]);
-        vtkmatrix->SetElement(1, 3, -translation[1] + m_TransformParameters->GetTransformCenterY() + translateVector[10]);
-        vtkmatrix->SetElement(2, 3, -translation[2] + m_TransformParameters->GetTransformCenterY() + translateVector[11]);
+        vtkmatrix->SetElement(0, 3, -translation[0] + center[0] + translateVector[9]);
+        vtkmatrix->SetElement(1, 3, -translation[1] + center[1] + translateVector[10]);
+        vtkmatrix->SetElement(2, 3, -translation[2] + center[2] + translateVector[11]);
       }
       vtktransform->SetMatrix(vtkmatrix);
     }
@@ -485,15 +490,15 @@
       vtkmatrix->MultiplyPoint(center, translation);
       if (m_FixedDimension == 2)
       {
-        vtkmatrix->SetElement(0, 3, -translation[0] + m_TransformParameters->GetTransformCenterX() + translateVector[4]);
-        vtkmatrix->SetElement(1, 3, -translation[1] + m_TransformParameters->GetTransformCenterY() + translateVector[5]);
+        vtkmatrix->SetElement(0, 3, -translation[0] + center[0] + translateVector[4]);
+        vtkmatrix->SetElement(1, 3, -translation[1] + center[1] + translateVector[5]);
       }
-      else if (m_FixedDimension == 3)
+      else if (m_FixedDimension == 3)                 
       {
-        vtkmatrix->SetElement(0, 3, -translation[0] + m_TransformParameters->GetTransformCenterX() + translateVector[9]);
-        vtkmatrix->SetElement(1, 3, -translation[1] + m_TransformParameters->GetTransformCenterY() + translateVector[10]);
-        vtkmatrix->SetElement(2, 3, -translation[2] + m_TransformParameters->GetTransformCenterY() + translateVector[11]);
-      }
+        vtkmatrix->SetElement(0, 3, -translation[0] + center[0] + translateVector[9]);
+        vtkmatrix->SetElement(1, 3, -translation[1] + center[1] + translateVector[10]);
+        vtkmatrix->SetElement(2, 3, -translation[2] + center[2] + translateVector[11]);
+      }                                               
       vtktransform->SetMatrix(vtkmatrix);
     }
     else if (m_TransformBox->currentItem() == mitk::TransformParameters::RIGID3DTRANSFORM)
