diff --git a/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index f66f196..36d04e0 100644
--- a/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/core/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -79,6 +79,7 @@
     private String default_orthography;
     private String default_dep;
     private String default_const;
+    private String apiWelcomeMessage;
     private String defaultStructureFoundry;
     private ArrayList<String> foundries;
     private ArrayList<String> layers;
@@ -135,7 +136,8 @@
      */
     protected void load (Properties properties) throws Exception {
         loadBasicProperties(properties);
-        
+
+        apiWelcomeMessage = properties.getProperty("api.welcome.message", "Welcome to KorAP API!");
         currentVersion = properties.getProperty("current.api.version", "v1.0");
         String supportedVersions =
                 properties.getProperty("supported.api.version", "");
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java b/core/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
index 5bbcfeb..3329a4f 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
@@ -28,6 +28,7 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
@@ -64,12 +65,13 @@
     private SearchService searchService;
     @Autowired
     private OAuth2ScopeService scopeService;
-    
+    @Autowired
+    private KustvaktConfiguration config;
     
     @GET
     @Path("{version}")
     public Response index (){
-        return Response.ok("Welcome to KorAP API!").build();
+        return Response.ok(config.getApiWelcomeMessage()).build();
     }
     
     @POST
diff --git a/full/src/main/resources/kustvakt.conf b/full/src/main/resources/kustvakt.conf
index 62546c6..a9086ba 100644
--- a/full/src/main/resources/kustvakt.conf
+++ b/full/src/main/resources/kustvakt.conf
@@ -12,6 +12,7 @@
 ldap.config = file-path-to-ldap-config
 
 # Kustvakt
+api.welcome.message = Welcome to KorAP API!
 current.api.version = v1.0
 # multiple versions separated by space
 # supported.api.version = v1.0
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
index 18e2c35..a97ab50 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
@@ -8,6 +8,7 @@
 
 import javax.ws.rs.core.MediaType;
 
+import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -22,6 +23,7 @@
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * @author hanl, margaretha
@@ -30,6 +32,9 @@
  */
 public class SearchControllerTest extends SpringJerseyTest {
 
+    @Autowired
+    private KustvaktConfiguration config;
+
     private JsonNode requestSearchWithFields(String fields) throws KustvaktException{
         ClientResponse response = resource().path(API_VERSION).path("search")
                 .queryParam("q", "[orth=das]").queryParam("ql", "poliqarp")
@@ -50,7 +55,17 @@
         s.setQuery("Wasser", "poliqarp");
         return s.toJSON();
     }
-    
+
+    @Test
+    public void testApiWelcomeMessage () {
+        ClientResponse response = resource().path(API_VERSION).path("")
+                .get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        String message = response.getEntity(String.class);
+        assertEquals(message, config.getApiWelcomeMessage());
+    }
+
     @Test
     public void testSearchWithField () throws KustvaktException {
         JsonNode node = requestSearchWithFields("author");
diff --git a/lite/src/main/resources/kustvakt-lite.conf b/lite/src/main/resources/kustvakt-lite.conf
index e78f993..9dc83b5 100644
--- a/lite/src/main/resources/kustvakt-lite.conf
+++ b/lite/src/main/resources/kustvakt-lite.conf
@@ -13,6 +13,7 @@
 
 # Kustvakt settings
 
+api.welcome.message = Welcome to KorAP API!
 current.api.version = v1.0
 # multiple versions separated by space
 supported.api.version = v1.0
diff --git a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteSearchControllerTest.java b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteSearchControllerTest.java
index 6463ce9..54367ab 100644
--- a/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteSearchControllerTest.java
+++ b/lite/src/test/java/de/ids_mannheim/korap/web/service/LiteSearchControllerTest.java
@@ -25,6 +25,7 @@
 
 import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
 import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.config.LiteJerseyTest;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
@@ -36,7 +37,9 @@
 
     @Autowired
     private SearchKrill searchKrill;
-    
+    @Autowired
+    private KustvaktConfiguration config;
+
 //  EM: The API is disabled
     @Ignore   
     @Test
@@ -82,6 +85,16 @@
     }
 
     @Test
+    public void testApiWelcomeMessage () {
+        ClientResponse response = resource().path(API_VERSION).path("")
+                .get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        String message = response.getEntity(String.class);
+        assertEquals(message, config.getApiWelcomeMessage());
+    }
+
+    @Test
     public void testQueryGet () throws KustvaktException {
         ClientResponse response = resource().path(API_VERSION).path("search")
                 .queryParam("q", "[orth=das]").queryParam("ql", "poliqarp")
