public IPolicySet ConvertPolicySet(AddPolicyLoadConversionMessageDelegate AddConversionMessage)
		{
			const decimal currentVersion = 2.1M;

			PolicyConverterBase converter = null;			

			decimal version = decimal.Parse(GetPolicySetVersion(), CultureInfo.InvariantCulture);
			if (0 < decimal.Compare(currentVersion, version))
			{
				PolicySetVersionStatus status = LatestVersion.Status;

                converter = new PolicySetVersionConverter_2_1(m_policySetCache, AddConversionMessage);
				converter.CreateCopyOfLatestVersion();
				SetVersionStatus(LatestVersion, PolicySetVersionStatus.Disabled);
				converter.Convert();
				converter.ConvertCompiledPolicySets();

				//	Restore status in the latest version
				SetVersionStatus(LatestVersion, status);
			}
			else if (0 == decimal.Compare(currentVersion, version))
			{
				converter = new PolicyConverterBase(m_policySetCache, AddConversionMessage);
			}
			else
			{
				ErrorMessage errorMessage = new ErrorMessage("POLICY_VERSION_NOT_SUPPORTED", "Workshare.Policy.Properties.Resources", Assembly.GetExecutingAssembly());
				Logger.LogError(errorMessage.LogString);
				throw new Exceptions.PolicyException(errorMessage.DisplayString);
			}

			IPolicySet result = converter.LatestPolicySet;
			if (result.PolicyType != m_policySetCache.LatestPolicyType)
			{
				string error = string.Format(CultureInfo.CurrentCulture, Properties.Resources.POLICY_TYPES_DISAGREE, m_policySetCache.LatestPolicyType, result.PolicyType);
				Logger.LogError(error);
				throw new Exceptions.PolicyException(error);
			}

			return result;
		}