diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateDomainSpecificationConstants.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateDomainSpecificationConstants.mtl
index aa4efe8..ee52fb0 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateDomainSpecificationConstants.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateDomainSpecificationConstants.mtl
@@ -22,18 +22,36 @@
  *******************************************************************************/
 /]
 
-[module generateDomainSpecificationConstants('http://org.eclipse.lyo/oslc4j/adaptorInterface')]
+[module generateDomainSpecificationConstants('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')]
 
 [import org::eclipse::lyo::oslc4j::codegenerator::services::services/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::serviceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/]
+
+[query public resourceTypeNamespace(aResource: Resource) : String =
+(if (aResource.describes.oclIsUndefined()) then
+    domainSpecificationNamespaceConstantName(aResource.definingDomainSpecification())
+else
+    javaInterfaceNameForConstants(aResource.describes.definingVocabulary()).concat('.').concat(vocabularyNamespaceConstantName(aResource.describes.definingVocabulary()))
+endif)
+/]
+
+[query public resourceTypeLocalName(aResource: Resource) : String =
+(if (aResource.describes.oclIsUndefined()) then
+    '"'.concat(aResource.javaName(true)).concat('"')
+else
+	'"'.concat(aResource.describes.javaName(true)).concat('"')
+endif)
+/]
 
 [template public generateResourceConstants(aResource : Resource)]
-public static String [resourceConstantName(aResource)/] = "[aResource.javaName(true)/]";
 public static String [resourcePathConstantName(aResource)/] = "[aResource.javaName(false)/]";
-public static String [resourceTypeConstantName(aResource)/] = [domainSpecificationNamespaceConstantName(aResource.definingDomainSpecification())/] + [resourceConstantName(aResource)/];
+public static String [resourceTypeNamespaceConstantName(aResource)/] = [resourceTypeNamespace(aResource)/]; //namespace of the rdfs:class the resource describes
+public static String [resourceTypeLocalNameConstantName(aResource)/] = [resourceTypeLocalName(aResource)/]; //localName of the rdfs:class the resource describes
+public static String [resourceTypeConstantName(aResource)/] = [resourceTypeNamespaceConstantName(aResource)/] + [resourceTypeLocalNameConstantName(aResource)/]; //fullname of the rdfs:class the resource describes
 [/template]
 
 [template public generateDomainSpecificationConstants(aDomainSpecification: DomainSpecification, anAdaptorInterface : AdaptorInterface, defaultJavaFilesPath : String, defaultJavaClassPackageName : String)]
@@ -66,6 +84,7 @@
 package [javaInterfacePackageNameForConstants(aDomainSpecification, anAdaptorInterface, defaultJavaClassPackageName) /];
 
 import org.eclipse.lyo.oslc4j.core.model.OslcConstants;
+[for (aVocabulary: Vocabulary | relevantVocabularies(aDomainSpecification)->sortedBy(label)) separator(lineSeparator())]import [javaInterfaceFullNameForConstants(aVocabulary, anAdaptorInterface, defaultJavaClassPackageName) /];[/for]
 
 // [protected ('imports')]
 // [/protected]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResource.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResource.mtl
index bfdfcdb..fe2a7ed 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResource.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResource.mtl
@@ -169,9 +169,9 @@
 [template public generateClassAnnotations(aResource : Resource, contextAdaptorInterface : AdaptorInterface)]
 // [protected ('classAnnotations')]
 // [/protected]
-@OslcNamespace([javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[domainSpecificationNamespaceConstantName(aResource.definingDomainSpecification()) /])
-@OslcName([javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceConstantName(aResource) /])
-@OslcResourceShape(title = "[aResource.name /] Resource Shape", describes = [javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /])
+[namespaceAnnotation(aResource)/]
+[nameAnnotation(aResource)/]
+[resourceShapeAnnotation(aResource)/]
 [/template]
 
 [template public generateClassDeclaration(aResource : Resource, contextAdaptorInterface : AdaptorInterface)]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceInterface.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceInterface.mtl
index 6078b9a..c669528 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceInterface.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateResourceInterface.mtl
@@ -112,9 +112,9 @@
 // [protected ('imports')]
 // [/protected]
 
-@OslcNamespace([javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[domainSpecificationNamespaceConstantName(aResource.definingDomainSpecification()) /])
-@OslcName([javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceConstantName(aResource) /])
-@OslcResourceShape(title = "[aResource.name /] Resource Shape", describes = [javaInterfaceNameForConstants(aResource.definingDomainSpecification())/].[resourceTypeConstantName(aResource) /])
+[namespaceAnnotation(aResource)/]
+[nameAnnotation(aResource)/]
+[resourceShapeAnnotation(aResource)/]
 public interface [javaInterfaceName(aResource) /]
 {
 
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateVocabularyConstants.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateVocabularyConstants.mtl
new file mode 100644
index 0000000..c88c2da
--- /dev/null
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/files/generateVocabularyConstants.mtl
@@ -0,0 +1,75 @@
+[comment encoding = UTF-8 /]
+[comment
+/*******************************************************************************
+ * Copyright (c) 2018 Jad El-khoury.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Eclipse Distribution License v. 1.0 which accompanies this distribution.
+ *  
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *
+ *     Jad El-khoury        - initial implementation
+ *******************************************************************************/
+/]
+
+[module generateVocabularyConstants('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')]
+
+[import org::eclipse::lyo::oslc4j::codegenerator::services::services/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::serviceServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/]
+
+[template public generateClassConstants(aClass : Class)]
+public static String [classConstantName(aClass)/] = "[aClass.javaName(true)/]";
+public static String [classTypeConstantName(aClass)/] = [vocabularyNamespaceConstantName(aClass.definingVocabulary())/] + [classConstantName(aClass)/];
+[/template]
+
+[template public generateVocabularyConstants(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, defaultJavaFilesPath : String, defaultJavaClassPackageName : String)]
+[file (javaInterfaceFullFileNameForConstants(aVocabulary, anAdaptorInterface, defaultJavaFilesPath, defaultJavaClassPackageName), false, 'UTF-8')]
+// [protected ('Copyright')]
+/*******************************************************************************
+ * Copyright (c) 2018 Jad El-khoury.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Eclipse Distribution License v. 1.0 which accompanies this distribution.
+ *  
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *
+ *     Jad El-khoury        initial implementation
+ * 
+ * This file is generated by org.eclipse.lyo.oslc4j.codegenerator
+ *******************************************************************************/
+// [/protected]
+
+package [javaInterfacePackageNameForConstants(aVocabulary, anAdaptorInterface, defaultJavaClassPackageName) /];
+
+import org.eclipse.lyo.oslc4j.core.model.OslcConstants;
+
+// [protected ('imports')]
+// [/protected]
+
+public interface [javaInterfaceNameForConstants(aVocabulary) /]
+{
+    // [protected ('user constants')]
+    // [/protected]
+
+    public static String [vocabularyNamespaceConstantName(aVocabulary)/] = "[aVocabulary.namespaceURI/]";
+    public static String [vocabularyPreferredNamespacePrefixConstantName(aVocabulary)/] = "[aVocabulary.preferredNamespacePrefix/]";
+
+    [for (aClass: Class | aVocabulary.classes->sortedBy(name))]
+    [generateClassConstants(aClass) /]
+    [/for]
+}
+[/file]
+[/template]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generate.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generate.mtl
index e0999c6..9dfefc1 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generate.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generate.mtl
@@ -20,12 +20,13 @@
  *******************************************************************************/
 /]
 
-[module generate('http://org.eclipse.lyo/oslc4j/adaptorInterface')]
+[module generate('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')]
 
 [import org::eclipse::lyo::oslc4j::codegenerator::services::services/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourcePropertyServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/]
 
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateServiceProviderCatalogService/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateServiceProviderCatalogSingleton/]
@@ -37,6 +38,7 @@
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateClientOnlyMainApplication/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateAdaptorPackageInfo/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateDomainSpecificationConstants/]
+[import org::eclipse::lyo::oslc4j::codegenerator::files::generateVocabularyConstants/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateAdaptorConstants/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateServiceProviderService/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateServiceProviderInfo/]
@@ -95,6 +97,12 @@
 [/for]
 [/template]
 
+[template public generateForRelevantVocabularies(anAdaptorInterface : AdaptorInterface)]
+[for (aVocabulary: Vocabulary | relevantVocabularies(anAdaptorInterface))]
+    [aVocabulary.generateVocabularyConstants(anAdaptorInterface, null, null)/]
+[/for]
+[/template]
+
 [template public generateForRelevantResources(anAdaptorInterface : AdaptorInterface)]
 [for (aResource: Resource | relevantResources(anAdaptorInterface))]
     [aResource.generateResource(anAdaptorInterface, null, null) /]
@@ -172,6 +180,7 @@
     [generateClientOnlyMainApplication(anAdaptorInterface)/]
 [/if]
 [generateForRelevantDomainSpecifications(anAdaptorInterface)/]
+[generateForRelevantVocabularies(anAdaptorInterface)/]
 [generateForRelevantResources(anAdaptorInterface)/]
 [generateForRequiredAdaptors(anAdaptorInterface)/]
 [/template]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generateSpecification.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generateSpecification.mtl
index 1740be9..edcecb6 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generateSpecification.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/main/generateSpecification.mtl
@@ -17,15 +17,17 @@
  *******************************************************************************/
 /]
 
-[module generateSpecification('http://org.eclipse.lyo/oslc4j/adaptorInterface')]
+[module generateSpecification('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')]
 
 [import org::eclipse::lyo::oslc4j::codegenerator::services::services/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourcePropertyServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
 
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateDomainSpecificationConstants/]
+[import org::eclipse::lyo::oslc4j::codegenerator::files::generateVocabularyConstants/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateResource/]
 [import org::eclipse::lyo::oslc4j::codegenerator::files::generateResourceInterface/]
 [import org::eclipse::lyo::oslc4j::codegenerator::staticFiles::generateLicenseFiles/]
@@ -47,6 +49,12 @@
 relevantResources(aSpecification)->collectNested(aResource : Resource | aResource.definingDomainSpecification())->flatten()->asSet()
 /]
 
+[query public relevantVocabularies(aSpecification : Specification) : Set(Vocabulary) =
+relevantDomainSpecifications(aSpecification)->collectNested(aDomainSpecification : DomainSpecification | 
+	relevantVocabularies(aDomainSpecification)
+)->flatten()->asSet()
+/]
+
 [template public generateSpecification(aSpecification : Specification)]
 [comment @main/]
 [if (canGenerate(aSpecification))]
@@ -54,6 +62,10 @@
     [for (aDomainSpecification: DomainSpecification | aSpecification.relevantDomainSpecifications())]
         [aDomainSpecification.generateDomainSpecificationConstants(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName)/]
     [/for]
+
+    [for (aVocabulary: Vocabulary | aSpecification.relevantVocabularies())]
+        [aVocabulary.generateVocabularyConstants(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName)/]
+    [/for]
     
     [for (aResource: Resource | aSpecification.relevantResources())]
         [aResource.generateResource(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName) /]
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/adaptorInterfaceServices.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/adaptorInterfaceServices.mtl
index deafb03..771cab3 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/adaptorInterfaceServices.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/adaptorInterfaceServices.mtl
@@ -251,18 +251,6 @@
 javaConstantName(aDomainSpecification).concat('_NAMSPACE_PREFIX')
 /]
 
-[query public resourceConstantName(aResource : Resource) : String = 
-aResource.javaName(true).toUpperCase()
-/]
-
-[query public resourcePathConstantName(aResource : Resource) : String = 
-'PATH_'.concat(aResource.javaName(true).toUpperCase())
-/]
-
-[query public resourceTypeConstantName(aResource : Resource) : String = 
-'TYPE_'.concat(aResource.javaName(true).toUpperCase())
-/]
-
 [comment Services for RequiredAdaptor /]
 [query public servicedResources(aRequiredAdaptor : RequiredAdaptor) : Set(Resource) =
 if (aRequiredAdaptor.oclIsTypeOf(GenericRequiredAdaptor)) then
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourcePropertyServices.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourcePropertyServices.mtl
index 6abc8df..d4afaf7 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourcePropertyServices.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourcePropertyServices.mtl
@@ -24,6 +24,7 @@
 [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
 [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/]
 
 [query public javaName(aProperty: ResourceProperty, toUpperFirst : Boolean) : String = 
 javaString(aProperty.name, aProperty.definingDomainSpecification().namespacePrefix.name, toUpperFirst)
@@ -36,12 +37,34 @@
 not (Sequence{'URI'}->includes(aProperty.valueType.toString()))
 /]
 
+[query public resourcePropertyDefinitionNamespace(aResourceProperty: ResourceProperty) : String =
+(if (aResourceProperty.propertyDefinition.oclIsUndefined()) then
+    javaInterfaceNameForConstants(aResourceProperty.definingDomainSpecification()).concat('.').concat(domainSpecificationNamespaceConstantName(aResourceProperty.definingDomainSpecification()))
+else
+    javaInterfaceNameForConstants(aResourceProperty.propertyDefinition.definingVocabulary()).concat('.').concat(vocabularyNamespaceConstantName(aResourceProperty.propertyDefinition.definingVocabulary()))
+endif)
+/]
+
+[query public resourcePropertyDefinitionLocalName(aResourceProperty: ResourceProperty) : String =
+(if (aResourceProperty.propertyDefinition.oclIsUndefined()) then
+    '"'.concat(aResourceProperty.javaName(false)).concat('"')
+else
+	'"'.concat(aResourceProperty.propertyDefinition.javaName(false)).concat('"')
+endif)
+/]
+
 [query public nameAnnotation(aProperty: ResourceProperty) : String = 
-'@OslcName("'.concat(javaName(aProperty, false)). concat('")')
+'@OslcName('
+.concat(resourcePropertyDefinitionLocalName(aProperty))
+.concat(')')
 /]
 
 [query public propertyDefinitionAnnotation(aProperty: ResourceProperty, aResource: Resource, anAdaptorInterface: AdaptorInterface) : String = 
-'@OslcPropertyDefinition('.concat(javaInterfaceNameForConstants(aProperty.definingDomainSpecification())).concat('.').concat(domainSpecificationNamespaceConstantName(aProperty.definingDomainSpecification())) . concat(' + "').concat(javaName(aProperty, false)).concat('")')
+'@OslcPropertyDefinition('
+.concat(resourcePropertyDefinitionNamespace(aProperty))
+.concat(' + ')
+.concat(resourcePropertyDefinitionLocalName(aProperty))
+.concat(')')
 /]
 
 [query public descriptionAnnotation(aProperty: ResourceProperty) : String = 
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourceServices.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourceServices.mtl
index dfd619a..1d6017b 100644
--- a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourceServices.mtl
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/resourceServices.mtl
@@ -173,3 +173,49 @@
     .concat('.java')
 /]
 
+[query public resourceConstantName(aResource : Resource) : String = 
+javaConstantString(aResource.name)
+/]
+
+[query public resourcePathConstantName(aResource : Resource) : String = 
+resourceConstantName(aResource).concat('_PATH')
+/]
+
+[query public resourceTypeNamespaceConstantName(aResource : Resource) : String = 
+resourceConstantName(aResource).concat('_NAMESPACE')
+/]
+
+[query public resourceTypeLocalNameConstantName(aResource : Resource) : String = 
+resourceConstantName(aResource).concat('_LOCALNAME')
+/]
+
+[query public resourceTypeConstantName(aResource : Resource) : String = 
+resourceConstantName(aResource).concat('_TYPE')
+/]
+
+[query public nameAnnotation(aResource : Resource) : String = 
+'@OslcName('
+.concat(javaInterfaceNameForConstants(aResource.definingDomainSpecification()))
+.concat('.')
+.concat(resourceTypeLocalNameConstantName(aResource))
+.concat(')')
+/]
+
+[query public namespaceAnnotation(aResource : Resource) : String = 
+'@OslcNamespace('
+.concat(javaInterfaceNameForConstants(aResource.definingDomainSpecification()))
+.concat('.')
+.concat(resourceTypeNamespaceConstantName(aResource))
+.concat(')')
+/]
+
+[query public resourceShapeAnnotation(aResource : Resource) : String = 
+'@OslcResourceShape(title = "'
+.concat(aResource.name).concat(' ').concat('Resource Shape')
+.concat('", describes = ')
+.concat(javaInterfaceNameForConstants(aResource.definingDomainSpecification()))
+.concat('.')
+.concat(resourceTypeConstantName(aResource))
+.concat(')')
+/]
+
diff --git a/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/vocabularyServices.mtl b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/vocabularyServices.mtl
new file mode 100644
index 0000000..8979263
--- /dev/null
+++ b/org.eclipse.lyo.oslc4j.codegenerator/src/org/eclipse/lyo/oslc4j/codegenerator/services/vocabularyServices.mtl
@@ -0,0 +1,117 @@
+[comment encoding = UTF-8 /]
+[comment
+/*******************************************************************************
+ * Copyright (c) 2018 Jad El-khoury.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * and Eclipse Distribution License v. 1.0 which accompanies this distribution.
+ *
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *
+ *     Jad El-khoury        - initial implementation
+ *     
+ *******************************************************************************/
+/]
+
+[module vocabularyServices('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')/]
+
+[import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/]
+[import org::eclipse::lyo::oslc4j::codegenerator::services::services/]
+
+[query public relevantVocabularies(aDomainSpecification: DomainSpecification) : Set(Vocabulary) =
+aDomainSpecification.resources->select(not describes.oclIsUndefined())->collect(aResource : Resource | definingVocabulary(aResource.describes))
+->union(
+	aDomainSpecification.resourceProperties->select(not propertyDefinition.oclIsUndefined())->collect(aResourceProperty : ResourceProperty | definingVocabulary(aResourceProperty.propertyDefinition))
+)->asSet()
+/]
+
+[query public relevantVocabularies(anAdaptorInterface : AdaptorInterface) : Set(Vocabulary) =
+anAdaptorInterface.relevantDomainSpecifications()->collectNested(aDomainSpecification : DomainSpecification | 
+	relevantVocabularies(aDomainSpecification)
+)->flatten()->asSet()
+/]
+
+[query public definingVocabulary(aProperty: Property) : Vocabulary =
+aProperty.eContainer(Vocabulary)
+/]
+
+[query public definingVocabulary(aClass: Class) : Vocabulary =
+aClass.eContainer(Vocabulary)
+/]
+
+[query public javaFullFilesPath(aVocabularies: Vocabularies, anAdaptorInterface : AdaptorInterface, default : String) : String = 
+(if (anAdaptorInterface.oclIsUndefined()) then 
+    default
+else
+    javaFilesBasePath(anAdaptorInterface, default)
+endif)
+/]
+
+[query public javaPackageName(aVocabularies: Vocabularies, anAdaptorInterface : AdaptorInterface, default : String) : String = 
+(if (anAdaptorInterface.oclIsUndefined()) then 
+    default
+else
+    javaClassBaseNamespace(anAdaptorInterface, default).concat('.resources')
+endif)
+/]
+
+[query public javaFullFilesPath(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, default : String) : String = 
+javaFullFilesPath(aVocabulary.eContainer(Vocabularies), anAdaptorInterface, default)
+/]
+
+[query public javaPackageName(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, default : String) : String = 
+javaPackageName(aVocabulary.eContainer(Vocabularies), anAdaptorInterface, default)
+/]
+
+[query public javaInterfacePackageNameForConstants(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, defaultJavaPackageName : String) : String = 
+javaPackageName(aVocabulary, anAdaptorInterface, defaultJavaPackageName)
+/]
+
+[query public javaInterfaceNameForConstants(aVocabulary: Vocabulary) : String =
+javaString(aVocabulary.preferredNamespacePrefix, 'oslc', true).concat('VocabularyConstants')
+/]
+
+[query public javaInterfaceFullNameForConstants(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, defaultJavaPackageName : String) : String = 
+javaInterfacePackageNameForConstants(aVocabulary, anAdaptorInterface, defaultJavaPackageName).concat('.').concat(javaInterfaceNameForConstants(aVocabulary))
+/]
+
+[query public javaInterfaceFullFileNameForConstants(aVocabulary: Vocabulary, anAdaptorInterface : AdaptorInterface, defaultJavaFullFilesPath : String, defaultJavaPackageName : String) : String = 
+    javaFullFilesPath(aVocabulary, anAdaptorInterface, defaultJavaFullFilesPath)
+    .concatenatePaths(javaInterfacePackageNameForConstants(aVocabulary, anAdaptorInterface, defaultJavaPackageName).substituteAll('.', '/'))
+    .concatenatePaths(javaInterfaceNameForConstants(aVocabulary))
+    .concat('.java')
+/]
+
+[query public javaName(aClass: Class, toUpperFirst : Boolean) : String = 
+javaString(aClass.name, aClass.definingVocabulary().preferredNamespacePrefix, toUpperFirst)
+/]
+
+[query public javaName(aProperty: Property, toUpperFirst : Boolean) : String = 
+javaString(aProperty.name, aProperty.definingVocabulary().preferredNamespacePrefix, toUpperFirst)
+/]
+
+[comment Services for VocabularyConstants /]
+[query public javaConstantName(aVocabulary : Vocabulary) : String = 
+javaConstantString(aVocabulary.label)
+/]
+
+[query public vocabularyNamespaceConstantName(aVocabulary : Vocabulary) : String = 
+javaConstantName(aVocabulary).concat('_NAMSPACE')
+/]
+
+[query public vocabularyPreferredNamespacePrefixConstantName(aVocabulary : Vocabulary) : String = 
+javaConstantName(aVocabulary).concat('_NAMSPACE_PREFIX')
+/]
+
+[query public classConstantName(aClass : Class) : String = 
+aClass.javaName(true).toUpperCase()
+/]
+
+[query public classTypeConstantName(aClass : Class) : String = 
+'TYPE_'.concat(aClass.javaName(true).toUpperCase())
+/]
