diff --git a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/PawleyFunction.h b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/PawleyFunction.h
index 953cdd6ac12727ff8db2244e0bc6d332091ec6bd..b8d26a9786accafb8d28694216c49164b29c1a5c 100644
--- a/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/PawleyFunction.h
+++ b/Code/Mantid/Framework/CurveFitting/inc/MantidCurveFitting/PawleyFunction.h
@@ -143,6 +143,8 @@ public:
   PawleyParameterFunction_sptr getPawleyParameterFunction() const;
 
 protected:
+  double getTransformedCenter(double d) const;
+
   void init();
   void beforeDecoratedFunctionSet(const API::IFunction_sptr &fn);
 
diff --git a/Code/Mantid/Framework/CurveFitting/src/PawleyFunction.cpp b/Code/Mantid/Framework/CurveFitting/src/PawleyFunction.cpp
index 08d0157ea213f3353b3fbe857dd76be3c1a0059f..3567a1497224e800a5c7518653b3d65a7be68e01 100644
--- a/Code/Mantid/Framework/CurveFitting/src/PawleyFunction.cpp
+++ b/Code/Mantid/Framework/CurveFitting/src/PawleyFunction.cpp
@@ -275,15 +275,19 @@ void PawleyFunction::setMatrixWorkspace(
     boost::shared_ptr<const MatrixWorkspace> workspace, size_t wi,
     double startX, double endX) {
   if (workspace) {
-    Axis *xAxis = workspace->getAxis(0);
-
+    Axis *xAxis = workspace->getAxis(wi);
     Kernel::Unit_sptr wsUnit = xAxis->unit();
 
-    double factor, power;
-    if (wsUnit->quickConversion(*m_dUnit, factor, power)) {
-      m_wsUnit = wsUnit;
+    if (boost::dynamic_pointer_cast<Units::Empty>(wsUnit) ||
+        boost::dynamic_pointer_cast<Units::dSpacing>(wsUnit)) {
+      m_wsUnit = m_dUnit;
     } else {
-      throw std::invalid_argument("Can not use quick conversion for unit.");
+      double factor, power;
+      if (wsUnit->quickConversion(*m_dUnit, factor, power)) {
+        m_wsUnit = wsUnit;
+      } else {
+        throw std::invalid_argument("Can not use quick conversion for unit.");
+      }
     }
   }
 
@@ -336,6 +340,15 @@ void PawleyFunction::setUnitCell(const std::string &unitCellString) {
       strToUnitCell(unitCellString));
 }
 
+double PawleyFunction::getTransformedCenter(double d) const {
+  if ((m_dUnit && m_wsUnit) && m_dUnit != m_wsUnit) {
+    return UnitConversion::run(*m_dUnit, *m_wsUnit, d, 0, 0, 0,
+                               DeltaEMode::Elastic, 0);
+  }
+
+  return d;
+}
+
 /**
  * Calculates the function values on the supplied domain
  *
@@ -354,10 +367,7 @@ void PawleyFunction::function(const FunctionDomain &domain,
   double zeroShift = m_pawleyParameterFunction->getParameter("ZeroShift");
 
   for (size_t i = 0; i < m_hkls.size(); ++i) {
-    double d = cell.d(m_hkls[i]);
-
-    double centre = UnitConversion::run(*m_dUnit, *m_wsUnit, d, 0, 0, 0,
-                                        DeltaEMode::Elastic, 0);
+    double centre = getTransformedCenter(cell.d(m_hkls[i]));
 
     m_peakProfileComposite->getFunction(i)->setParameter(
         m_pawleyParameterFunction->getProfileFunctionCenterParameterName(),