diff --git a/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml b/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
index 46e482c..ee66e25 100755
--- a/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
+++ b/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
@@ -100,4 +100,11 @@
             scheme="cdo.checkout">
       </sashModelProvider>
    </extension>
+   <extension
+         point="org.eclipse.papyrus.infra.internationalization.internationalizationPreferenceModelProvider">
+      <internationalizationPreferenceModelProvider
+            class="org.eclipse.papyrus.cdo.internal.core.resource.CDOInternationalizationPreferenceModelProvider"
+            scheme="cdo.checkout">
+      </internationalizationPreferenceModelProvider>
+   </extension>
 </plugin>
diff --git a/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java b/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java
index 7f26802..58ce298 100644
--- a/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java
+++ b/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java
@@ -15,25 +15,26 @@
 
 package org.eclipse.papyrus.cdo.internal.core.resource;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
-import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
-import org.eclipse.emf.cdo.util.CDOURIUtil;
 import org.eclipse.emf.common.util.URI;
-import org.eclipse.papyrus.cdo.internal.core.Activator;
-import org.eclipse.papyrus.infra.core.resource.ModelSet;
 import org.eclipse.papyrus.infra.internationalization.modelresource.AbstractInternationalizationPreferenceModelProvider;
 import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
 
 
 public class CDOInternationalizationPreferenceModelProvider extends AbstractInternationalizationPreferenceModelProvider {
 
+	public static final String CDO_LOCAL_PREFERENCEMODEL_URI_PREFIX = "/cdo.checkout/";//$NON-NLS-1$
 
 	public CDOInternationalizationPreferenceModelProvider() {
 		super();
 	}
 
 	/**
+	 * This method is computing the URI for the case when the location of the internationalization
+	 * preference information is located in a local "hidden" directory. (~/.metadata/etc...")
+	 * In the case where the Papyrus model is an CDO resource, we provide a new mechanism to compute a local URI.
+	 * 
 	 * @see org.eclipse.papyrus.infra.internationalization.modelresource.IInternationalizationPreferenceModelProvider#getInternationalizationPreferenceModelURI(org.eclipse.emf.common.util.URI)
 	 *
 	 * @param userModelURI
@@ -41,31 +42,16 @@
 	 */
 	@Override
 	public URI getInternationalizationPreferenceModelURI(URI userModelURI) {
-		URI uriWithoutExtension = userModelURI.trimFileExtension();
-		IPath stateLocation = indexFolder.append(CDOURIUtil.extractResourcePath(uriWithoutExtension));
-		return URI.createFileURI(stateLocation.toString()).appendFileExtension(InternationalizationPreferenceModel.INTERNATIONALIZATION_PREFERENCE_FILE_EXTENSION);
+		Assert.isNotNull(userModelURI);
+		final IPath internationalizationWorkspaceLocation = org.eclipse.papyrus.infra.internationalization.Activator.getDefault().getStateLocation();
+		final URI modelURI = userModelURI.trimFileExtension();
+		URI internationalizationModelURI = null;
+		internationalizationModelURI = URI.createFileURI(internationalizationWorkspaceLocation.append(CDO_LOCAL_PREFERENCEMODEL_URI_PREFIX + modelURI.devicePath()).toPortableString());
+		internationalizationModelURI = internationalizationModelURI.appendFileExtension(InternationalizationPreferenceModel.INTERNATIONALIZATION_PREFERENCE_FILE_EXTENSION);
+
+		return internationalizationModelURI;
 	}
 
-	private static final IPath INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT = Activator.getDefault().getStateLocation().append("internationalizationidx"); //$NON-NLS-1$
 
-	private IPath indexFolder;
-
-	@Override
-	public void initialize(ModelSet modelSet) {
-		super.initialize(modelSet);
-
-		CDOCheckout checkout = CDOExplorerUtil.getCheckout(modelSet);
-		if (checkout != null) {
-			initialize(checkout);
-		} else {
-			// Model probably is in the workspace if null
-			indexFolder = INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT;
-		}
-	}
-
-	public CDOInternationalizationPreferenceModelProvider initialize(CDOCheckout checkout) {
-		indexFolder = INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT.append(checkout.getView().getSession().getRepositoryInfo().getUUID());
-		return this;
-	}
 
 }
