diff --git a/sys/include/shell.h b/sys/include/shell.h
index 0b3cf13aee6e5390cb026c622ec7d4e3f7be0816..0e225204469b17f6569a59f6e73ebd38fc1dbc86 100644
--- a/sys/include/shell.h
+++ b/sys/include/shell.h
@@ -20,6 +20,7 @@
 
 #ifndef __SHELL_H
 #define __SHELL_H
+#include <stdint.h>
 
 typedef struct shell_command_t {
     char *name;
@@ -29,20 +30,21 @@ typedef struct shell_command_t {
 
 typedef struct shell_t {
     const shell_command_t *command_list;
+    uint16_t shell_buffer_size;
     int (*readchar)(void);
     void (*put_char)(int);
 } shell_t;
 
-#define SHELL_BUFFER_SIZE (127)
-
 /**
  * @brief Initialize a shell object
  * @param shell Pointer to preallocated shell object
  * @param shell_commands Pointer to shell command structure. See test_shell project for example.
+ * @param shell_buffer_size The size of the shell buffer.
  * @param read_char Pointer to input device read function. Should return exactly one byte or block.
  * @param put_char Pointer to output funtion. currently unused, shell code will use printf.
  */
-void shell_init(shell_t *shell,  /*@null@*/ const shell_command_t *shell_commands, int(*read_char)(void), void (*put_char)(int));
+void shell_init(shell_t *shell,  /*@null@*/ const shell_command_t *shell_commands,
+                uint16_t shell_buffer_size, int(*read_char)(void), void (*put_char)(int));
 
 /**
  * @brief Endless loop that waits for command and executes handler.
diff --git a/sys/shell/shell.c b/sys/shell/shell.c
index 2878208c6934618e624ba60cdb2cad075477421a..a70122c899477bb009da239d6106baf7aa78400a 100644
--- a/sys/shell/shell.c
+++ b/sys/shell/shell.c
@@ -1,5 +1,5 @@
 /**
- * Shell interpreter 
+ * Shell interpreter
  *
  * Copyright (C) 2009, Freie Universitaet Berlin (FUB).
  * Copyright (C) 2013, INRIA.
@@ -45,7 +45,7 @@ static void(*find_handler(const shell_command_t *command_list, char *command))(c
     const shell_command_t *entry;
 
     /* iterating over command_lists */
-    for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) {
+    for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) {
         if ((entry = command_lists[i])) {
             /* iterating over commands in command_lists entry */
             while (entry->name != NULL) {
@@ -77,7 +77,7 @@ static void print_help(const shell_command_t *command_list)
     const shell_command_t *entry;
 
     /* iterating over command_lists */
-    for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) {
+    for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) {
         if ((entry = command_lists[i])) {
             /* iterating over commands in command_lists entry */
             while (entry->name != NULL) {
@@ -90,7 +90,7 @@ static void print_help(const shell_command_t *command_list)
 
 static void handle_input_line(shell_t *shell, char *line)
 {
-    char line_copy[SHELL_BUFFER_SIZE];
+    char line_copy[shell->shell_buffer_size];
     char *saveptr;
     strncpy(line_copy, line, sizeof(line_copy));
     char *command = strtok_r(line_copy, " ", &saveptr);
@@ -152,7 +152,7 @@ static inline void print_prompt(shell_t *shell)
 
 void shell_run(shell_t *shell)
 {
-    char line_buf[SHELL_BUFFER_SIZE];
+    char line_buf[shell->shell_buffer_size];
 
     print_prompt(shell);
 
@@ -167,9 +167,11 @@ void shell_run(shell_t *shell)
     }
 }
 
-void shell_init(shell_t *shell, const shell_command_t *shell_commands, int(*readchar)(void), void(*put_char)(int))
+void shell_init(shell_t *shell, const shell_command_t *shell_commands,
+                uint16_t shell_buffer_size, int(*readchar)(void), void(*put_char)(int))
 {
     shell->command_list = shell_commands;
+    shell->shell_buffer_size = shell_buffer_size;
     shell->readchar = readchar;
     shell->put_char = put_char;
 }