diff --git a/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java b/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
index d58407d..87e8c49 100644
--- a/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
+++ b/src/main/java/org/eclipse/openk/elogbook/controller/BackendControllerUser.java
@@ -32,6 +32,7 @@
 
 import javax.persistence.EntityManager;
 import java.util.List;
+import java.util.Optional;
 
 public class BackendControllerUser {
 	
@@ -97,7 +98,24 @@
 
 	}
 
-	public void storeUserSettings( String settingsToSave, String modUser ) throws BtbInternalServerError {
+	public String getUserSettings( String modUser ) throws BtbInternalServerError {
+		LOGGER.info("getUserSettings() is called");
+		EntityManager emOrg = EntityHelper.getEMF().createEntityManager();
+		try (AutoCloseEntityManager em = new AutoCloseEntityManager(emOrg)) {
+			TblUserSettingsDao dao = new TblUserSettingsDao(em);
+			try {
+				Optional<TblUserSettings> us =  dao.getSettingsForUser(modUser, DEFAULT_SETTING_TYPE);
+				return us.isPresent() ? us.get().getValue() : "{}";
+			} catch (Exception e) {
+				LOGGER.error( "Error loading usersettings" );
+				throw( new BtbInternalServerError("Error loading usersettings"));
+			}
+		} finally {
+			LOGGER.info("getUserSettings() is finished");
+		}
+	}
+
+	public boolean storeUserSettings( String settingsToSave, String modUser ) throws BtbInternalServerError {
 		LOGGER.info("storeUserSettings() is called");
 
 		EntityManager emOrg = EntityHelper.getEMF().createEntityManager();
@@ -114,11 +132,11 @@
 			try {
 				dao.persistInTx(userSettingsToStore);
 				em.getTransaction().commit();
+				return true;
 			} catch (Exception e) {
 				LOGGER.error( "Error storing usersettings" );
 				throw( new BtbInternalServerError("Error storing usersettings"));
 			}
-
 		} finally {
 			LOGGER.info("storeUserSettings() is finished");
 		}
diff --git a/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java b/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
index ced70b3..0a8b0ed 100644
--- a/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
+++ b/src/main/java/org/eclipse/openk/elogbook/controller/ControllerImplementations.java
@@ -340,6 +340,7 @@
 			this.backendControllerUser = backendControllerUser;
 		}
 
+
 		/*
 		 * (non-Javadoc)
 		 *
@@ -347,12 +348,36 @@
 		 */
 		@Override
 		public Response invoke() throws BtbException {
-		    backendControllerUser.storeUserSettings( this.userSettingsJson, getModUser() );
+			backendControllerUser.storeUserSettings( this.userSettingsJson, getModUser() );
 			return ResponseBuilderWrapper.INSTANCE
 					.buildOKResponse(Globals.OK_STRING);
 		}
 	}
 
+	/**
+	 * Get the settings for a given user
+	 */
+	public static class GetUserSettings extends BackendInvokable {
+		private BackendControllerUser backendControllerUser;
+
+		public GetUserSettings(BackendControllerUser backendControllerUser) {
+			this.backendControllerUser = backendControllerUser;
+		}
+
+
+		/*
+		 * (non-Javadoc)
+		 *
+		 * @see org.eclipse.openk.elogbook.controller.BaseWebService.Invokable#invoke()
+		 */
+		@Override
+		public Response invoke() throws BtbException {
+			String resultString = backendControllerUser.getUserSettings( getModUser() );
+			return ResponseBuilderWrapper.INSTANCE
+					.buildOKResponse(resultString);
+		}
+	}
+
 	public static class GetHistoricalShiftChangeList extends BackendInvokable {
 
 		private String responsibilitySearchFilterJson;
diff --git a/src/main/java/org/eclipse/openk/elogbook/rest/BackendRestService.java b/src/main/java/org/eclipse/openk/elogbook/rest/BackendRestService.java
index 4c614bd..0be952a 100644
--- a/src/main/java/org/eclipse/openk/elogbook/rest/BackendRestService.java
+++ b/src/main/java/org/eclipse/openk/elogbook/rest/BackendRestService.java
@@ -197,6 +197,13 @@
 				notificationSearchFilter, new BackendControllerNotification()));
 	}
 
+	@GET
+	@Path("/user-settings")
+	@Produces("application/json")
+	public Response getUserSettings(@HeaderParam(value = Globals.KEYCLOAK_AUTH_TAG) String token ) {
+		return invoke(token, SecureType.NORMAL, new ControllerImplementations.GetUserSettings( new BackendControllerUser()));
+	}
+
 	@POST
 	@Path("/user-settings")
 	@Produces("application/json")
diff --git a/src/test/java/org/eclipse/openk/elogbook/controller/ControllerImplementationsTest.java b/src/test/java/org/eclipse/openk/elogbook/controller/ControllerImplementationsTest.java
index 7ba5958..0de13b8 100644
--- a/src/test/java/org/eclipse/openk/elogbook/controller/ControllerImplementationsTest.java
+++ b/src/test/java/org/eclipse/openk/elogbook/controller/ControllerImplementationsTest.java
@@ -41,7 +41,11 @@
 
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertNotNull;
-import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.anyInt;
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.anyString;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
 import static org.eclipse.openk.elogbook.controller.BackendControllerResponsibility.POST_RESPONSIBILITY_MODE.PLAN;
 
 
@@ -417,4 +421,20 @@
 
         assertEquals(controllerImpl.invoke().getStatus(), HttpStatus.SC_OK);
     }
+
+
+    @Test
+    public void testPostUserSettings() throws BtbException {
+        String userSettingText = "{}";
+
+        ControllerImplementations.PostUserSettings controllerImpl
+                = new ControllerImplementations.PostUserSettings(userSettingText, beMockBackendControllerUser);
+        controllerImpl.setModUser("EgalUser");
+        expect(beMockBackendControllerUser.storeUserSettings( anyString(), anyString())).andReturn(true);
+        PowerMock.replay(beMockBackendControllerUser);
+
+        assertEquals(controllerImpl.invoke().getStatus(), HttpStatus.SC_OK);
+        assertEquals(controllerImpl.getModUser(), "EgalUser");
+    }
+
 }
diff --git a/src/test/java/org/eclipse/openk/elogbook/persistence/model/TblUserSettingsTest.java b/src/test/java/org/eclipse/openk/elogbook/persistence/model/TblUserSettingsTest.java
new file mode 100644
index 0000000..1d2a79c
--- /dev/null
+++ b/src/test/java/org/eclipse/openk/elogbook/persistence/model/TblUserSettingsTest.java
@@ -0,0 +1,33 @@
+/**
+******************************************************************************
+* Copyright © 2017-2018 PTA GmbH.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* 
+*     http://www.eclipse.org/legal/epl-v10.html
+* 
+******************************************************************************
+*/
+package org.eclipse.openk.elogbook.persistence.model;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class TblUserSettingsTest {
+
+	@Test
+	public void TestGettersSetters() {
+		TblUserSettings tblUserSettings = new TblUserSettings();
+		tblUserSettings.setId(1);
+		tblUserSettings.setValue("lari fari");
+		tblUserSettings.setUsername("Bruno Haferkamp");
+		tblUserSettings.setSettingType("Default");
+
+		assertEquals((long)tblUserSettings.getId(), 1);
+		assertEquals(tblUserSettings.getSettingType(), "Default");
+		assertEquals(tblUserSettings.getUsername(), "Bruno Haferkamp");
+		assertEquals(tblUserSettings.getValue(), "lari fari");
+ 	}
+}
