diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.vaadin.addons.designer.overlay/.settings/com.vaadin.integration.eclipse.prefs
index 7d2a1a0..694c8a1 100644
--- a/org.eclipse.osbp.vaadin.addons.designer.overlay/.settings/com.vaadin.integration.eclipse.prefs
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/.settings/com.vaadin.integration.eclipse.prefs
@@ -1,4 +1,4 @@
-com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.5.10","7.7.16"]
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.5.10","7.7.17"]
 com.vaadin.integration.eclipse.previousCompileAction=widgetset
 com.vaadin.integration.eclipse.useLatestNightly=false
 com.vaadin.integration.eclipse.widgetsetBuildsSuspended=true
diff --git a/org.eclipse.osbp.vaadin.addons.kanban/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.vaadin.addons.kanban/.settings/com.vaadin.integration.eclipse.prefs
index 079c585..3785754 100644
--- a/org.eclipse.osbp.vaadin.addons.kanban/.settings/com.vaadin.integration.eclipse.prefs
+++ b/org.eclipse.osbp.vaadin.addons.kanban/.settings/com.vaadin.integration.eclipse.prefs
@@ -1,5 +1,5 @@
 com.vaadin.integration.eclipse.mavenAutoCompileWidgetset=true
-com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.16"]
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.17"]
 com.vaadin.integration.eclipse.notifyOfVaadinUpdates=true
 com.vaadin.integration.eclipse.previousCompileAction=widgetset
 com.vaadin.integration.eclipse.useLatestNightly=false
diff --git a/org.eclipse.osbp.vaadin.addons.keyevents/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.vaadin.addons.keyevents/.settings/com.vaadin.integration.eclipse.prefs
index cd0ea90..543ac33 100644
--- a/org.eclipse.osbp.vaadin.addons.keyevents/.settings/com.vaadin.integration.eclipse.prefs
+++ b/org.eclipse.osbp.vaadin.addons.keyevents/.settings/com.vaadin.integration.eclipse.prefs
@@ -1,11 +1,11 @@
 com.vaadin.integration.eclipse.mavenAutoCompileWidgetset=true
-com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.16"]
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.17"]
 com.vaadin.integration.eclipse.notifyOfVaadinUpdates=true
 com.vaadin.integration.eclipse.previousCompileAction=widgetset
 com.vaadin.integration.eclipse.useLatestNightly=false
 com.vaadin.integration.eclipse.widgetsetBuildsSuspended=true
-com.vaadin.integration.eclipse.widgetsetCompilationEta=31801
-com.vaadin.integration.eclipse.widgetsetDirty=false
+com.vaadin.integration.eclipse.widgetsetCompilationEta=31469
+com.vaadin.integration.eclipse.widgetsetDirty=true
 com.vaadin.integration.eclipse.widgetsetExtraParameters=-strict -logLevel WARN
 com.vaadin.integration.eclipse.widgetsetStyle=PRETTY
 com.vaadin.integration.eclipse.widgetsetVerbose=true
diff --git a/org.eclipse.osbp.vaadin.addons.keyevents/Sample/org/eclipse/osbp/vaadin/addons/keyevents/sample/KeyEventsSample.java b/org.eclipse.osbp.vaadin.addons.keyevents/Sample/org/eclipse/osbp/vaadin/addons/keyevents/sample/KeyEventsSample.java
index ee9c68a..6d0c343 100644
--- a/org.eclipse.osbp.vaadin.addons.keyevents/Sample/org/eclipse/osbp/vaadin/addons/keyevents/sample/KeyEventsSample.java
+++ b/org.eclipse.osbp.vaadin.addons.keyevents/Sample/org/eclipse/osbp/vaadin/addons/keyevents/sample/KeyEventsSample.java
@@ -36,6 +36,7 @@
 	@WebServlet(value = "/*", asyncSupported = true)
 	@VaadinServletConfiguration(productionMode = false, ui = KeyEventsSample.class, widgetset = "org.eclipse.osbp.vaadin.addons.keyevents.KeyEventsWidgetset")
 	public static class Servlet extends VaadinServlet {
+		String a = "";
 	}
 
 	@Override
@@ -83,7 +84,9 @@
 					e.charCode = 0xDF;
 				}
 			}
-			t.setValue(" "+e.charCode+" "+(char)e.charCode);
+			t.setValue(t.getValue() + (char)e.charCode);
+			return;
+//			t.setValue(" "+e.charCode+" "+(char)e.charCode);
 		});
 
 		this.focus();
diff --git a/org.eclipse.osbp.vaadin.addons.keyevents/src/org/eclipse/osbp/vaadin/addons/keyevents/client/KeyEventExtensionConnector.java b/org.eclipse.osbp.vaadin.addons.keyevents/src/org/eclipse/osbp/vaadin/addons/keyevents/client/KeyEventExtensionConnector.java
index a34203b..782dd5f 100644
--- a/org.eclipse.osbp.vaadin.addons.keyevents/src/org/eclipse/osbp/vaadin/addons/keyevents/client/KeyEventExtensionConnector.java
+++ b/org.eclipse.osbp.vaadin.addons.keyevents/src/org/eclipse/osbp/vaadin/addons/keyevents/client/KeyEventExtensionConnector.java
@@ -1,20 +1,18 @@
 package org.eclipse.osbp.vaadin.addons.keyevents.client;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.eclipse.osbp.vaadin.addons.keyevents.KeyEventExtension;
 
+import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.event.dom.client.KeyCodes;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.Event.NativePreviewEvent;
 import com.google.gwt.user.client.Event.NativePreviewHandler;
+import com.google.gwt.user.client.ui.RootPanel;
 import com.vaadin.client.ServerConnector;
 import com.vaadin.client.VConsole;
 import com.vaadin.client.communication.RpcProxy;
 import com.vaadin.client.extensions.AbstractExtensionConnector;
-import com.vaadin.event.ShortcutAction.KeyCode;
-import com.vaadin.event.ShortcutAction.ModifierKey;
 import com.vaadin.shared.ui.Connect;
 
 @SuppressWarnings("serial")
@@ -23,23 +21,6 @@
 
 	private KeyEventServerRpc serverRPC = RpcProxy.create(KeyEventServerRpc.class, this);
 	private HandlerRegistration handlerRegistration;
-	protected Map<Integer, String> unkeyMapper = new HashMap<Integer, String>() {
-		private static final long serialVersionUID = 8801421284339992078L;
-		{
-			put(KeyCode.ARROW_DOWN, "ARROW_DOWN");
-			put(KeyCode.ARROW_LEFT, "ARROW_LEFT");
-			put(KeyCode.ARROW_RIGHT, "ARROW_RIGHT");
-			put(KeyCode.ARROW_UP, "ARROW_UP");
-			put(KeyCode.HOME, "HOME");
-			put(KeyCode.END, "END");
-			put(KeyCode.DELETE, "DELETE");
-			put(KeyCode.BACKSPACE, "BACKSPACE");
-			put(ModifierKey.ALT, "ALT");
-			put(ModifierKey.SHIFT, "SHIFT");
-			put(ModifierKey.CTRL, "CTRL");
-			put(ModifierKey.META, "META");
-		}
-	};
 
 	@Override
 	protected void init() {
@@ -47,17 +28,29 @@
 
 		handlerRegistration = com.google.gwt.user.client.Event.addNativePreviewHandler(new NativePreviewHandler() {
 			@Override
-			public void onPreviewNativeEvent(NativePreviewEvent nativePreviewEvent) {
-				switch (nativePreviewEvent.getTypeInt()) {
-				case com.google.gwt.user.client.Event.ONKEYUP:
-					final Event event = createEvent(nativePreviewEvent.getNativeEvent());
-					if (!unkeyMapper.containsKey(event.charCode)) {
-						serverRPC.onKeyPress(event);
-						nativePreviewEvent.cancel();
+			public void onPreviewNativeEvent(NativePreviewEvent event) {
+				if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_BACKSPACE) {
+					final Event evt = createNullEvent();
+					serverRPC.onKeyPress(evt);
+		            if (event.getNativeEvent().getEventTarget() != null) {
+		                Element as = Element.as(event.getNativeEvent().getEventTarget());
+		                if (as == RootPanel.getBodyElement()) {
+		                    event.getNativeEvent().stopPropagation();
+		                    event.getNativeEvent().preventDefault();
+		                }
+		            }
+		 		} else {
+					switch (event.getTypeInt()) {
+					case com.google.gwt.user.client.Event.ONKEYDOWN:
+					case com.google.gwt.user.client.Event.ONKEYUP:
+						final Event evt = createEvent(event.getNativeEvent());
+						if(event.getTypeInt()==com.google.gwt.user.client.Event.ONKEYUP) {
+							serverRPC.onKeyPress(evt);
+						}
+						event.cancel();
+						break;
 					}
-					break;
-				}
-
+		 		}
 			}
 		});
 	}
@@ -66,7 +59,7 @@
 		super.onUnregister();
 
 		if (handlerRegistration != null) {
-			VConsole.log("Unregister handlerRegistratio for keyEvents");
+			VConsole.log("Unregister handlerRegistration for keyEvents");
 			handlerRegistration.removeHandler();
 		}
 	}
@@ -86,4 +79,14 @@
 		return e;
 	}
 
+	protected Event createNullEvent() {
+		Event e = new Event();
+		e.charCode = 'x';
+		e.altKeyDown = false;
+		e.controlKeyDown = false;
+		e.metaKeyDown = false;
+		e.shiftKeyDown = false;
+		return e;
+	}
+
 }
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.project b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
index 8d17138..a1ffab8 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/.project
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
@@ -41,11 +41,6 @@
 			</arguments>
 		</buildCommand>
 		<buildCommand>
-			<name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
 			</arguments>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/com.vaadin.integration.eclipse.prefs b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/com.vaadin.integration.eclipse.prefs
index 2b85cce..27e395e 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/com.vaadin.integration.eclipse.prefs
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/com.vaadin.integration.eclipse.prefs
@@ -1,5 +1,5 @@
 com.vaadin.integration.eclipse.mavenAutoCompileWidgetset=true
-com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.16"]
+com.vaadin.integration.eclipse.mavenLatestVersionsUpgrade=["7.7.17"]
 com.vaadin.integration.eclipse.notifyOfVaadinUpdates=true
 com.vaadin.integration.eclipse.previousCompileAction=widgetset
 com.vaadin.integration.eclipse.useLatestNightly=false
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.jdt.core.prefs
index 13b3428..91ca62e 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.jdt.core.prefs
@@ -10,4 +10,5 @@
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.wst.common.component b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.wst.common.component
index 9578c6f..14142d1 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.wst.common.component
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.settings/org.eclipse.wst.common.component
@@ -3,6 +3,7 @@
         <wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
         <wb-resource deploy-path="/WEB-INF/classes" source-path="/Sample"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/test"/>
         <property name="java-output-path" value="/org.eclipse.osbp.vaadin.addons.suggesttext/build/classes"/>
         <property name="context-root" value="org.eclipse.osbp.vaadin.addons.suggesttext"/>
     </wb-module>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
index 1925187..5b53d60 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!DOCTYPE ivy-module [
-	<!ENTITY vaadin.version "7.7.6">
+	<!ENTITY vaadin.version "7.7.13">
 ]>
 <ivy-module version="2.0"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
index 562b821..352dd2b 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
@@ -21,6 +21,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
 
 import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
 import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldClientRpc;
@@ -102,10 +103,10 @@
 
 		@Override
 		public void selectionChanged(String handleId, String id) {
-			if(!Objects.equals(handleId, currentHandleId)){
+			if (!Objects.equals(handleId, currentHandleId)) {
 				return;
 			}
-			
+
 			Object itemId = getItemById(id);
 			if (itemId != null) {
 				fireSelectionChanged(itemId);
@@ -116,6 +117,11 @@
 		public void setSuggestionEnabled(boolean value) {
 			SuggestTextField.this.setSuggestionEnabled(value);
 		}
+
+		@Override
+		public void openHistorizedDialog() {
+			SuggestTextField.this.openHistorizedDialog();
+		}
 	};
 
 	/** The container. */
@@ -130,6 +136,12 @@
 	/** The uuidmapping. */
 	private Map<String, Object> uuidmapping = new HashMap<>();
 
+	private Object currentItemId;
+
+	private Function<Object, String> captionFunction;
+
+	private ShowHistoryDialogCallback histDialogCallback;
+
 	/**
 	 * Instantiates a new suggest text field.
 	 */
@@ -185,6 +197,44 @@
 	}
 
 	/**
+	 * Sets the function to map the object (DTO) into a string representation.
+	 * 
+	 * @param captionFunction
+	 */
+	public void setCaptionPropertyRetriever(Function<Object, String> captionFunction) {
+		this.captionFunction = captionFunction;
+	}
+	
+	/**
+	 * Sets the current itemId which is displayed.
+	 * 
+	 * @param itemId
+	 */
+	public void setCurrentItemId(Object itemId) {
+//		boolean changed = currentItemId != itemId;
+		currentItemId = itemId;
+
+//		if (changed) {
+//			// null due to constructor call on init
+//			if (textField == null) {
+//				setValue("");
+//				return;
+//			}
+//F
+//			setValue(captionFunction.apply(itemId));
+//		}
+	}
+	
+	/**
+	 * Returns the current selected itemId.
+	 * 
+	 * @return
+	 */
+	public Object getCurrentItemId() {
+		return currentItemId;
+	}
+	
+	/**
 	 * Returns the value from the text field.
 	 * 
 	 * @return
@@ -203,7 +253,9 @@
 		currentHandleId = null;
 		closePopup();
 		textField.setValue(value);
-		if(isSuggestionEnabled()) {
+		// TODO - update later bei RPC
+		setCurrentItemId(null);
+		if (isSuggestionEnabled()) {
 			openPopup();
 		}
 	}
@@ -278,6 +330,15 @@
 	}
 
 	/**
+	 * Opens the historized dialog.
+	 */
+	protected void openHistorizedDialog() {
+		if(histDialogCallback != null) {
+			histDialogCallback.openHistoryDialog();
+		}
+	}
+
+	/**
 	 * Tooltip for "disable suggestions" action.
 	 * 
 	 * @param disableSuggestionTooltip
@@ -287,6 +348,29 @@
 	}
 
 	/**
+	 * True, if the bean is historized. Allows the client to render an
+	 * OpenHistorizedDialog button.
+	 * 
+	 * @param historized
+	 */
+	public void setHistorized(boolean historized) {
+		getState(true).historized = historized;
+	}
+
+	/**
+	 * Sets the historizedTooltip.
+	 * 
+	 * @param historizedTooltip
+	 */
+	public void setHistorizedTooltip(String historizedTooltip) {
+		getState(true).historizedTooltip = historizedTooltip;
+	}
+	
+	public void setShowHistoryDialogCallback(ShowHistoryDialogCallback histDialogCallback) {
+		this.histDialogCallback = histDialogCallback;
+	}
+
+	/**
 	 * True, if suggestions should be enabled. False otherwise.
 	 *
 	 * @param suggestionEnabled
@@ -691,11 +775,25 @@
 		void selectionChanged(SelectionChangedEvent event);
 
 	}
+	
+	public interface ShowHistoryDialogCallback {
+		void openHistoryDialog();
+	}
 
 	public class TextFieldCustom extends TextField {
 
 		public TextFieldCustom() {
 			super();
 		}
+
+		@Override
+		protected void setInternalValue(String newValue) {
+			super.setInternalValue(newValue);
+		}
+
+		@Override
+		public void setValue(String newValue) throws ReadOnlyException {
+			super.setValue(newValue);
+		}
 	}
 }
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
index 3c35070..2cf9335 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
@@ -77,7 +77,10 @@
 public class OSuggestBox extends SimplePanel implements HasText, Focusable, HasEnabled, HasAllKeyHandlers,
 		HasValue<String>, HasSelectionHandlers<Suggestion>, IsEditor<LeafValueEditor<String>> {
 
+	private static final String HIST_HIDDEN = "hist-hidden";
+	private static final String HIST_VISIBLE = "hist-visible";
 	private static final String SELECTED_CLASSNAME = "selected";
+	private static final String HISTORIZED_CLASSNAME = "historized";
 
 	/**
 	 * The callback used when a user selects a {@link Suggestion}.
@@ -811,6 +814,10 @@
 
 	private String disableSuggestionTooltip;
 
+	private String historizedToolTip;
+	private boolean isHistorizedEnabled;
+	private Element historizedModeDiv;
+
 	private SuggestTextFieldServerRpc serverRpc;
 
 	/**
@@ -883,6 +890,8 @@
 
 		Element mainElement = getElement();
 
+		// suggestModeDiv
+		//
 		suggestModeDiv = DOM.createDiv();
 		suggestModeDiv.addClassName("enableSuggestions");
 		mainElement.appendChild(suggestModeDiv);
@@ -902,9 +911,39 @@
 		});
 		Event.sinkEvents(suggestModeDiv, Event.ONCLICK);
 
+		// historizedModeDiv
+		//
+		historizedModeDiv = DOM.createDiv();
+		mainElement.appendChild(historizedModeDiv);
+		historizedModeDiv.addClassName(HISTORIZED_CLASSNAME);
+		historizedModeDiv.setTitle(historizedToolTip);
+		
+		historizedModeDiv.removeClassName(HIST_VISIBLE);
+		historizedModeDiv.removeClassName(HIST_HIDDEN);
+		if(isHistorizedEnabled) {
+			historizedModeDiv.addClassName(HIST_VISIBLE);
+		}else{
+			historizedModeDiv.addClassName(HIST_HIDDEN);
+		}
+
+		Event.setEventListener(historizedModeDiv, new EventListener() {
+			@Override
+			public void onBrowserEvent(Event event) {
+				showHistorizedDialog();
+			}
+		});
+		Event.sinkEvents(historizedModeDiv, Event.ONCLICK);
+
 		setStyleName(STYLENAME_DEFAULT);
 	}
 
+	/**
+	 * Opens the historized dialog server side by RPC call.
+	 */
+	protected void showHistorizedDialog() {
+		serverRpc.openHistorizedDialog();
+	}
+
 	public boolean isSuggestMode() {
 		return suggestModeDiv.hasClassName(SELECTED_CLASSNAME);
 	}
@@ -1432,4 +1471,28 @@
 		this.serverRpc = serverRpc;
 	}
 
+	public void setIsHistorizedEnabled(boolean historized) {
+		this.isHistorizedEnabled = historized;
+		
+		if(historizedModeDiv != null) {
+			historizedModeDiv.removeClassName(HIST_VISIBLE);
+			historizedModeDiv.removeClassName(HIST_HIDDEN);
+			
+			if(isHistorizedEnabled) {
+				historizedModeDiv.addClassName(HIST_VISIBLE);
+			}else{
+				historizedModeDiv.addClassName(HIST_HIDDEN);
+			}
+		}
+	}
+
+	public void setHistorizedToolTip(String historizedTooltip) {
+		this.historizedToolTip = historizedTooltip;
+		
+		if(historizedModeDiv != null) {
+			historizedModeDiv.setTitle(historizedTooltip);
+		}
+
+	}
+
 }
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
index cd25d5c..6f0757e 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
@@ -133,6 +133,9 @@
 		getWidget().setOpenPopupKey(getState().openPopup_key);
 		getWidget().setOpenPopupKeyModifier(getState().openPopup_modifier);
 		getWidget().setDisableSuggestionTooltip(getState().disableSuggestionTooltip);
+		getWidget().setIsHistorizedEnabled(getState().historized);
+		getWidget().setHistorizedToolTip(getState().historizedTooltip);
+		
 	}
 
 	/*
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
index d429868..fa72645 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
@@ -16,7 +16,6 @@
 
 import com.vaadin.shared.communication.ServerRpc;
 
-// TODO: Auto-generated Javadoc
 /**
  * The Interface SuggestTextFieldServerRpc.
  */
@@ -52,4 +51,9 @@
 	 */
 	public void setSuggestionEnabled(boolean value);
 
+	/**
+	 * Opens the historized dialog.
+	 */
+	public void openHistorizedDialog();
+
 }
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
index bab3684..48e1957 100644
--- a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
@@ -59,4 +59,14 @@
 	 * Tooltip text
 	 */
 	public String disableSuggestionTooltip = "disable / enable suggestion";
+
+	/**
+	 * True if content is historized.
+	 */
+	public boolean historized;
+
+	/**
+	 * The tooltip for historized button.
+	 */
+	public String historizedTooltip;
 }
