diff --git a/bundles/org.eclipse.rap.rwt/js/rwt/remote/MessageProcessor.js b/bundles/org.eclipse.rap.rwt/js/rwt/remote/MessageProcessor.js
index b8b2b03..7a39d90 100644
--- a/bundles/org.eclipse.rap.rwt/js/rwt/remote/MessageProcessor.js
+++ b/bundles/org.eclipse.rap.rwt/js/rwt/remote/MessageProcessor.js
@@ -29,9 +29,6 @@
     if( head.requestCounter !== undefined ) {
       server.setRequestCounter( head.requestCounter );
     }
-    if( head.uiSession !== undefined ) {
-      server.setUISession( head.uiSession );
-    }
     if( head.redirect !== undefined ) {
       document.location = head.redirect;
     }
diff --git a/bundles/org.eclipse.rap.rwt/js/rwt/remote/Server.js b/bundles/org.eclipse.rap.rwt/js/rwt/remote/Server.js
index dcd6010..bb6e305 100644
--- a/bundles/org.eclipse.rap.rwt/js/rwt/remote/Server.js
+++ b/bundles/org.eclipse.rap.rwt/js/rwt/remote/Server.js
@@ -76,14 +76,6 @@
       return this._requestCounter;
     },
 
-    setUISession : function( uiSession ) {
-      this._uiSession = uiSession;
-    },
-
-    getUISession : function() {
-      return this._uiSession;
-    },
-
     getConnectionId : function() {
       return this._connectionId;
     },
@@ -134,9 +126,6 @@
           this.getMessageWriter().appendHead( "requestCounter", this._requestCounter );
         }
         this._requestCounter = -1;
-        if( this._uiSession ) {
-          this.getMessageWriter().appendHead( "uiSession", this._uiSession );
-        }
         this._startWaitHintTimer();
         var request = this._createRequest();
         request.setAsynchronous( async );
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler.java
index db1f26a..210d2c1 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler.java
@@ -11,8 +11,6 @@
  ******************************************************************************/
 package org.eclipse.rap.rwt.internal.service;
 
-import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.UI_SESSION;
-
 import java.io.IOException;
 import java.text.MessageFormat;
 
@@ -107,7 +105,6 @@
       UrlParameters.merge();
       runLifeCycle();
     }
-    writeUISessionId();
     writeProtocolMessage( response );
   }
 
@@ -216,15 +213,6 @@
     response.setCharacterEncoding( HTTP.CHARSET_UTF_8 );
   }
 
-  void writeUISessionId() {
-    if( hasInitializeParameter() ) {
-      UISession uiSession = ContextProvider.getUISession();
-      if( uiSession != null ) {
-        ContextProvider.getProtocolWriter().appendHead( UI_SESSION, uiSession.getId() );
-      }
-    }
-  }
-
   private static void writeProtocolMessage( ServletResponse response ) throws IOException {
     ProtocolMessageWriter protocolWriter = ContextProvider.getProtocolWriter();
     String message = protocolWriter.createMessage();
diff --git a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/MessageProcessorTest.js b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/MessageProcessorTest.js
index 5d8a795..fd9d996 100644
--- a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/MessageProcessorTest.js
+++ b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/MessageProcessorTest.js
@@ -643,19 +643,6 @@
       assertEquals( 3, req.getRequestCounter() );
     },
 
-    testProcessHeadSetUISession : function() {
-      var processor = rwt.remote.MessageProcessor;
-      var message = {
-        "head": {
-          "uiSession": 3
-        },
-        "operations" : []
-      };
-      processor.processMessage( message );
-      var req = rwt.remote.Server.getInstance();
-      assertEquals( 3, req.getUISession() );
-    },
-
     testGetService : function() {
       var registry = rwt.remote.HandlerRegistry;
       var processor = rwt.remote.MessageProcessor;
diff --git a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/ServerTest.js b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/ServerTest.js
index fdefae7..5e0fa26 100644
--- a/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/ServerTest.js
+++ b/tests/org.eclipse.rap.rwt.jstest/js/org/eclipse/rwt/test/tests/ServerTest.js
@@ -28,14 +28,6 @@
       assertEquals( "number", typeof TestUtil.getMessageObject().getHead()[ "requestCounter" ] );
     },
 
-    testSendUISession : function() {
-      server.setUISession( "foo" );
-
-      server.send();
-
-      assertEquals( "foo", TestUtil.getMessageObject().getHead()[ "uiSession" ] );
-    },
-
     testGetServerObject : function() {
       rwt.remote.ObjectRegistry.add( "w1", rwt.widgets.Display.getCurrent() );
       var remoteObject = server.getRemoteObject( rwt.widgets.Display.getCurrent() );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler_Test.java
index 0a9fce0..f583141 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/service/LifeCycleServiceHandler_Test.java
@@ -347,40 +347,6 @@
     assertEquals( HttpServletResponse.SC_FORBIDDEN, response.getStatus() );
   }
 
-  @Test
-  public void testWriteUISessionId() {
-    simulateInitialUiRequest();
-
-    handler.writeUISessionId();
-
-    Message message = Fixture.getProtocolMessage();
-    String expected = ContextProvider.getUISession().getId();
-    assertEquals( expected, message.getHead().get( "uiSession" ).asString() );
-  }
-
-  @Test
-  public void testWriteUISessionId_whenUISessionIsNotBound() {
-    simulateInitialUiRequest();
-    UISession uiSession = mock( UISession.class );
-    when( Boolean.valueOf( uiSession.isBound() ) ).thenReturn( Boolean.FALSE );
-    ContextProvider.getContext().setUISession( uiSession );
-
-    handler.writeUISessionId();
-
-    Message message = Fixture.getProtocolMessage();
-    assertNull( message.getHead().get( "uiSession" ) );
-  }
-
-  @Test
-  public void testWriteUISessionId_ifNotInitialUiRequest() {
-    simulateUiRequest();
-
-    handler.writeUISessionId();
-
-    Message message = Fixture.getProtocolMessage();
-    assertNull( message.getHead().get( "uiSession" ) );
-  }
-
   private void simulateInitialUiRequest() {
     Fixture.fakeNewRequest();
     Fixture.fakeHeadParameter( ClientMessageConst.RWT_INITIALIZE, "true" );
