Index: main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java	(revision 30610)
+++ main/trunk/gli/src/org/greenstone/gatherer/cdm/CollectionConfigXMLReadWrite.java	(revision 30678)
@@ -94,20 +94,39 @@
 		{
 			Element item = (Element) item_list.get(i);
-			String text = XMLTools.getNodeText(item);
-			text = text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+			String text = XMLTools.getNodeText(item);			
 
 			//If there is nothing to display, don't bother creating the element
-			if (text == "")
+			// Either lang or key should be set. If key set, no textnode.
+			// if lang set, should have textnode. Check if it's meaningful
+			if (item.hasAttribute(StaticStrings.LANG_STR) && text.equals(""))
 			{
 				continue;
-			}
-			//get the value in 'lang=value'
+			}		
+
+			// get the value in 'lang=langcode' or 'key=keyname'
+			// We can have either a key attribute (with optional dictionary attribute, else dictionary is implicit)
+			// OR we can have a lang attr, with the nodetext containing the actual display string.
 			String lang = item.getAttribute(StaticStrings.LANG_STR);
+			String key = item.getAttribute(StaticStrings.KEY_ATTRIBUTE);
 
 			Element e = to.createElement(StaticStrings.COLLECTIONMETADATA_ELEMENT);
 			e.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
 			e.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_value);
-			e.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
-			XMLTools.setNodeText(e, text);
+
+			if(!lang.equals("")) {
+			    e.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
+			    text = text.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
+			    XMLTools.setNodeText(e, text);
+			    
+			}
+
+			if(!key.equals("")) {
+			    e.setAttribute(StaticStrings.KEY_ATTRIBUTE, key);
+			    String dictionary = item.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+			    if(!dictionary.equals("")) {
+				e.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary);
+			    }
+			}
+
 			display_item_list.add(e);
 		}
@@ -132,5 +151,5 @@
 
 			//If there is nothing to display, don't bother creating the element
-			if (text == "")
+			if (text.equals(""))
 			{
 				continue;
@@ -407,20 +426,23 @@
 
 			if(displayItem != null) {
-			    String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-			    
+
 			    String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
-			    
+
+			    String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);	    
 			    String value_str = XMLTools.getNodeText(displayItem);
-			    
+
+			    String key_str = displayItem.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+			    String dictionary_str = displayItem.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+
 			    Element displayItem_element = to.createElement(StaticStrings.DISPLAYITEM_ELEMENT); // <DisplayItem> not <displayItem>!
 			    displayItem_element.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
+				if (name_str != null && !name_str.equals(""))
+				{
+					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
+				}
 
 			        if (lang_str != null && !lang_str.equals(""))
 				{
 					displayItem_element.setAttribute(StaticStrings.LANG_ATTRIBUTE, lang_str);
-				}
-				if (name_str != null && !name_str.equals(""))
-				{
-					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
 				}
 				if (value_str != null && !value_str.equals(""))
@@ -429,4 +451,14 @@
 				    displayItem_element.setAttribute(StaticStrings.VALUE_ATTRIBUTE, value_str);
 				}
+
+				if (!key_str.equals(""))
+				{
+				    displayItem_element.setAttribute(StaticStrings.KEY_ATTRIBUTE, key_str);
+				}
+				if (!dictionary_str.equals(""))
+				{
+				    displayItem_element.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary_str);
+				}
+
 				sort_element.appendChild(displayItem_element);
 
@@ -462,20 +494,23 @@
 
 			if(displayItem != null) {
+			    String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
+
 			    String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-			    
-			    String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
-			    
 			    String value_str = XMLTools.getNodeText(displayItem);
 			    
+			    String key_str = displayItem.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+			    String dictionary_str = displayItem.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+
 			    Element displayItem_element = to.createElement(StaticStrings.DISPLAYITEM_ELEMENT); // <DisplayItem> not <displayItem>!
 			    displayItem_element.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
+			    
+				if (name_str != null && !name_str.equals(""))
+				{
+					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
+				}
 
 			        if (lang_str != null && !lang_str.equals(""))
 				{
 					displayItem_element.setAttribute(StaticStrings.LANG_ATTRIBUTE, lang_str);
-				}
-				if (name_str != null && !name_str.equals(""))
-				{
-					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
 				}
 				if (value_str != null && !value_str.equals(""))
@@ -483,4 +518,13 @@
 				    //XMLTools.setNodeText(displayItem_element, value_str);
 				    displayItem_element.setAttribute(StaticStrings.VALUE_ATTRIBUTE, value_str);
+				}
+
+				if (!key_str.equals(""))
+				{
+				    displayItem_element.setAttribute(StaticStrings.KEY_ATTRIBUTE, key_str);
+				}
+				if (!dictionary_str.equals(""))
+				{
+				    displayItem_element.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary_str);
 				}
 				facet_element.appendChild(displayItem_element);
@@ -941,16 +985,30 @@
 				Element item = (Element) displayItem_list.get(j);
 				String text = XMLTools.getNodeText(item);
+
+				//If there is nothing to display, don't bother creating the element
+				// Either lang or key should be set. If lang set, then should have textnode.
+				if (item.hasAttribute(StaticStrings.LANG_STR) && text.equals("")) {
+				    continue;
+				}
+				
 				String lang = item.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-
-				//If there is nothing to display, don't bother creating the element
-				if (text == "")
-				{
-					continue;
-				}
+				String key = item.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+			
 				Element collectionmetadata = to.createElement(StaticStrings.COLLECTIONMETADATA_ELEMENT);
 				collectionmetadata.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
 				collectionmetadata.setAttribute(StaticStrings.NAME_ATTRIBUTE, level_str);
-				collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
-				XMLTools.setNodeText(collectionmetadata, text);
+
+				if(!lang.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
+				    XMLTools.setNodeText(collectionmetadata, text);
+				}
+				
+				if(!key.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.KEY_ATTRIBUTE, key);
+				    String dictionary = item.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+				    if(!dictionary.equals("")) {
+					collectionmetadata.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary);
+				    }
+				}
 
 				appendProperly(toElement, collectionmetadata);
@@ -1003,17 +1061,32 @@
 				Element item = (Element) displayItem_list.get(j);
 				String text = XMLTools.getNodeText(item);
+				
+
+				//If there is nothing to display, don't bother creating the element
+				// Either lang or key should be set. If key set, no textnode.
+				// if lang set, should have textnode. Check if it's meaningful
+				if (item.hasAttribute(StaticStrings.LANG_STR) && text.equals(""))
+				{
+					continue;
+				}
+
 				String lang = item.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-
-				//If there is nothing to display, don't bother creating the element
-				if (text == "")
-				{
-					continue;
-				}
+				String key = item.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+
 				Element collectionmetadata = to.createElement(StaticStrings.COLLECTIONMETADATA_ELEMENT);
 				collectionmetadata.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
 				collectionmetadata.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
-				collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
-				XMLTools.setNodeText(collectionmetadata, text);
-
+				if(!lang.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
+				    XMLTools.setNodeText(collectionmetadata, text);
+				}
+				if(!key.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.KEY_ATTRIBUTE, key);
+				    String dictionary = item.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+				    if(!dictionary.equals("")) {
+					collectionmetadata.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary);
+				    }
+				}
+				
 				appendProperly(toElement, collectionmetadata);
 			}
@@ -1056,16 +1129,34 @@
 				Element item = (Element) displayItem_list.get(j);
 				String text = XMLTools.getNodeText(item);
+				//If there is nothing to display, don't bother creating the element
+				// Either lang or key should be set. If key set, no textnode.
+				// if lang set, should have textnode. Check if it's meaningful
+				if (item.hasAttribute(StaticStrings.LANG_STR) && text.equals(""))
+				{
+					continue;
+				}
+
+				// get the value in 'lang=langcode' or 'key=keyname'
+				// We can have either a key attribute (with optional dictionary attribute, else dictionary is implicit)
+				// OR we can have a lang attr, with the nodetext containing the actual display strin.g
 				String lang = item.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-
-				//If there is nothing to display, don't bother creating the element
-				if (text == "")
-				{
-					continue;
-				}
+				String key = item.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+
+
 				Element collectionmetadata = to.createElement(StaticStrings.COLLECTIONMETADATA_ELEMENT);
 				collectionmetadata.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
 				collectionmetadata.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
-				collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
-				XMLTools.setNodeText(collectionmetadata, text);
+
+				if(!lang.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.LANGUAGE_ATTRIBUTE, lang);
+				    XMLTools.setNodeText(collectionmetadata, text);
+				}
+				if(!key.equals("")) {
+				    collectionmetadata.setAttribute(StaticStrings.KEY_ATTRIBUTE, key);
+				    String dictionary = item.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+				    if(!dictionary.equals("")) {
+					collectionmetadata.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary);
+				    }
+				}
 
 				appendProperly(toElement, collectionmetadata);
@@ -1388,6 +1479,8 @@
 				String text = XMLTools.getNodeText(e);
 				String lang = e.getAttribute(StaticStrings.LANGUAGE_ATTRIBUTE);
+				String key = e.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+				String dictionary = e.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+
 				String name_value = e.getAttribute(StaticStrings.NAME_ATTRIBUTE);
-
 				String name_mapping = (String) attributeMap.get(name_value);
 				if (name_mapping != null)
@@ -1396,5 +1489,6 @@
 				}
 
-				Element displayItem = constructElement(StaticStrings.DISPLAYITEM_STR, name_value, StaticStrings.LANG_STR, lang, text, to);
+				Element displayItem = constructElement(StaticStrings.DISPLAYITEM_STR, name_value, StaticStrings.LANG_STR, lang, text, StaticStrings.KEY_ATTRIBUTE, key, StaticStrings.DICTIONARY_ATTRIBUTE, dictionary, to);
+				//Element displayItem = constructDisplayItem(e, to, name_value);
 				displayItemList.appendChild(displayItem);
 			}
@@ -1405,13 +1499,30 @@
 
 	// This method creates a DisplayItem element of the type of 'to' by using the ingredients from the element 'e'
-	static private Element constructDisplayItem(Element e, Document to)
+    static private Element constructDisplayItem(Element e, Document to, String name)
 	{
 		String lang_string = e.getAttribute(StaticStrings.LANGUAGE_ATTRIBUTE);
+		String key_string = e.getAttribute(StaticStrings.KEY_ATTRIBUTE);
+		String dictionary_string = e.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
 		String text = XMLTools.getNodeText(e);
+
 		Element displayItem = to.createElement(StaticStrings.DISPLAYITEM_STR);
-		displayItem.setAttribute(StaticStrings.NAME_ATTRIBUTE, StaticStrings.NAME_ATTRIBUTE);
-		displayItem.setAttribute(StaticStrings.LANG_STR, lang_string);
-		XMLTools.setNodeText(displayItem, text);
+		displayItem.setAttribute(StaticStrings.NAME_ATTRIBUTE, name);
+
+		if(!lang_string.equals("")) {
+		    displayItem.setAttribute(StaticStrings.LANG_STR, lang_string);
+		    XMLTools.setNodeText(displayItem, text);
+		}
+		if(!key_string.equals("")) {
+		    displayItem.setAttribute(StaticStrings.KEY_ATTRIBUTE, key_string);
+		    if(!dictionary_string.equals("")) {
+			displayItem.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, dictionary_string);
+		    }
+		}
 		return displayItem;
+	}
+
+    static private Element constructDisplayItem(Element e, Document to)
+	{	
+	    return constructDisplayItem(e, to, StaticStrings.NAME_ATTRIBUTE);
 	}
 
@@ -1452,11 +1563,20 @@
 
 	// This method creates an element with the name 'element_name' of the type of 'to' by using the other three strings
-	static private Element constructElement(String element_name, String name_value, String lang_att, String lang_value, String text, Document to)
+    static private Element constructElement(String element_name, String name_value, String lang_att, String lang_value, String text, String key_att, String key, String dict_att, String dictionary, Document to)
 	{
 		Element e = to.createElement(element_name);
 		e.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
 		e.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_value);
-		e.setAttribute(lang_att, lang_value);
-		XMLTools.setNodeText(e, text);
+
+		if(!lang_att.equals("")) {
+		    e.setAttribute(lang_att, lang_value);
+		    XMLTools.setNodeText(e, text);
+		}		
+		if(!key.equals("")) {
+		    e.setAttribute(key_att, key);
+		    if(!dictionary.equals("")) {
+			e.setAttribute(dict_att, dictionary);
+		    }
+		}
 
 		return e;
@@ -2265,8 +2385,69 @@
 				Element displayItem_element = to.createElement(StaticStrings.DISPLAYITEM_STR);//<displayItem>
 				
+				String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
+
+				String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);	
+				String value_str = displayItem.getAttribute(StaticStrings.VALUE_ATTRIBUTE);
+
+				String key_str = displayItem.getAttribute(StaticStrings.KEY_ATTRIBUTE);	
+				String dictionary_str = displayItem.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+
+				if (name_str != null && !name_str.equals(""))
+				    {
+					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
+				    }
+				
+				if (lang_str != null && !lang_str.equals(""))
+				    {
+					displayItem_element.setAttribute(StaticStrings.LANG_ATTRIBUTE, lang_str);
+				    }
+				if (value_str != null && !value_str.equals(""))
+				    {
+					XMLTools.setNodeText(displayItem_element, value_str);
+				    }
+
+				if(!key_str.equals("")) {
+				    displayItem_element.setAttribute(StaticStrings.KEY_ATTRIBUTE, key_str);
+				}
+				if(!dictionary_str.equals("")) {
+				    displayItem_element.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, key_str);
+				}
+
+				sort_ele.appendChild(displayItem_element);
+			    }
+			}
+
+			search.appendChild(sort_ele);
+
+		} //for loop on sort_elements ends
+
+		for (int j = 0; j < facet_elements_length; j++)
+		{
+			Element facet_element = (Element) facet_elements.item(j);
+			if (facet_element.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.FALSE_STR))
+			{
+				continue;
+			}
+
+			Element facet_ele = to.createElement(StaticStrings.FACET_LOW_STR);//<facet>
+			String name_attr = facet_element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
+
+			facet_ele.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_attr);
+
+			// Now constructing 'displayItem' element for this 'facet_ele' element
+			Element displayItem = (Element) XMLTools.getChildByTagName(facet_element, StaticStrings.DISPLAYITEM_ELEMENT); // gets the first <DisplayItem> (not <displayItem>!) child of <Facet>
+			
+			if(displayItem != null) {
+			    if (displayItem.hasAttribute(StaticStrings.ASSIGNED_ATTRIBUTE) && displayItem.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.TRUE_STR)) {
+				Element displayItem_element = to.createElement(StaticStrings.DISPLAYITEM_STR);//<displayItem>
+
+				String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
+				
 				String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-				String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
 				String value_str = displayItem.getAttribute(StaticStrings.VALUE_ATTRIBUTE);
-				
+
+				String key_str = displayItem.getAttribute(StaticStrings.KEY_ATTRIBUTE);	
+				String dictionary_str = displayItem.getAttribute(StaticStrings.DICTIONARY_ATTRIBUTE);
+
 				if (lang_str != null && !lang_str.equals(""))
 				    {
@@ -2278,50 +2459,13 @@
 				    }
 				if (value_str != null && !value_str.equals(""))
-				    {
-					XMLTools.setNodeText(displayItem_element, value_str);
-				    }
-				sort_ele.appendChild(displayItem_element);
-			    }
-			}
-
-			search.appendChild(sort_ele);
-
-		} //for loop on sort_elements ends
-
-		for (int j = 0; j < facet_elements_length; j++)
-		{
-			Element facet_element = (Element) facet_elements.item(j);
-			if (facet_element.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.FALSE_STR))
-			{
-				continue;
-			}
-
-			Element facet_ele = to.createElement(StaticStrings.FACET_LOW_STR);//<facet>
-			String name_attr = facet_element.getAttribute(StaticStrings.NAME_ATTRIBUTE);
-
-			facet_ele.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_attr);
-
-			// Now constructing 'displayItem' element for this 'facet_ele' element
-			Element displayItem = (Element) XMLTools.getChildByTagName(facet_element, StaticStrings.DISPLAYITEM_ELEMENT); // gets the first <DisplayItem> (not <displayItem>!) child of <Facet>
-			
-			if(displayItem != null) {
-			    if (displayItem.hasAttribute(StaticStrings.ASSIGNED_ATTRIBUTE) && displayItem.getAttribute(StaticStrings.ASSIGNED_ATTRIBUTE).equals(StaticStrings.TRUE_STR)) {
-				Element displayItem_element = to.createElement(StaticStrings.DISPLAYITEM_STR);//<displayItem>
-				
-				String lang_str = displayItem.getAttribute(StaticStrings.LANG_ATTRIBUTE);
-				String name_str = displayItem.getAttribute(StaticStrings.NAME_ATTRIBUTE);
-				String value_str = displayItem.getAttribute(StaticStrings.VALUE_ATTRIBUTE);
-
-				if (lang_str != null && !lang_str.equals(""))
-				    {
-					displayItem_element.setAttribute(StaticStrings.LANG_ATTRIBUTE, lang_str);
-				    }
-				if (name_str != null && !name_str.equals(""))
-				    {
-					displayItem_element.setAttribute(StaticStrings.NAME_ATTRIBUTE, name_str);
-				    }
-				if (value_str != null && !value_str.equals(""))
 				{
 				    XMLTools.setNodeText(displayItem_element, value_str);				    
+				}
+
+				if(!key_str.equals("")) {
+				    displayItem_element.setAttribute(StaticStrings.KEY_ATTRIBUTE, key_str);
+				}
+				if(!dictionary_str.equals("")) {
+				    displayItem_element.setAttribute(StaticStrings.DICTIONARY_ATTRIBUTE, key_str);
 				}
 				facet_ele.appendChild(displayItem_element);
Index: main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java
===================================================================
--- main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 30610)
+++ main/trunk/gli/src/org/greenstone/gatherer/util/StaticStrings.java	(revision 30678)
@@ -90,4 +90,5 @@
     static final public String DESCRIPTION_ELEMENT = "Description";
     static final public String DESCRIPTION_STR = "description";
+    static final public String DICTIONARY_ATTRIBUTE = "dictionary";
     static final public String DIRECTORY_MAPPINGS_ELEMENT = "DirectoryMappings";
     static final public String DISPLAYITEMLIST_STR = "displayItemList";
@@ -166,4 +167,5 @@
   
     static final public String[] KEEP_PLUG = { "GreenstoneXMLPlugin", "GreenstoneMETSPlugin", "EmbeddedMetadataPlugin" };
+    static final public String KEY_ATTRIBUTE = "key";
     static final public String LANGUAGE_ARGUMENT = "l=";
     static final public String LANGUAGE_ATTRIBUTE = "language";
