diff --git a/src/evalfunc.c b/src/evalfunc.c
index af46d15..7006afa 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3365,6 +3365,48 @@
 }
 
 /*
+ * Get next line from a string containing NL separated lines.
+ * Called by do_cmdline() to get the next line.
+ * Returns an allocated string, or NULL when at the end of the string.
+ */
+    static char_u *
+get_str_line(
+    int	    c UNUSED,
+    void    *cookie,
+    int	    indent UNUSED,
+    getline_opt_T options UNUSED)
+{
+    char_u	*start = *(char_u **)cookie;
+    char_u	*line;
+    char_u	*p;
+
+    p = start;
+    if (p == NULL || *p == NUL)
+	return NULL;
+    p = vim_strchr(p, '\n');
+    if (p == NULL)
+	line = vim_strsave(start);
+    else
+    {
+	line = vim_strnsave(start, p - start);
+	p++;
+    }
+
+    *(char_u **)cookie = p;
+    return line;
+}
+
+/*
+ * Execute a series of Ex commands in 'str'
+ */
+    void
+execute_cmds_from_string(char_u *str)
+{
+    do_cmdline(NULL, get_str_line, (void *)&str,
+	    DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT|DOCMD_KEYTYPED);
+}
+
+/*
  * Get next line from a list.
  * Called by do_cmdline() to get the next line.
  * Returns allocated string, or NULL for end of function.
diff --git a/src/if_lua.c b/src/if_lua.c
index 6ac3951..a131037 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -10,6 +10,7 @@
  */
 
 #include "vim.h"
+#include "version.h"
 
 #include <lua.h>
 #include <lualib.h>
@@ -191,6 +192,7 @@
 #define lua_rawget dll_lua_rawget
 #define lua_rawgeti dll_lua_rawgeti
 #define lua_createtable dll_lua_createtable
+#define lua_settable dll_lua_settable
 #if LUA_VERSION_NUM >= 504
  #define lua_newuserdatauv dll_lua_newuserdatauv
 #else
@@ -302,6 +304,7 @@
 int (*dll_lua_rawgeti) (lua_State *L, int idx, lua_Integer n);
 #endif
 void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+void (*dll_lua_settable) (lua_State *L, int idx);
 #if LUA_VERSION_NUM >= 504
 void *(*dll_lua_newuserdatauv) (lua_State *L, size_t sz, int nuvalue);
 #else
@@ -413,6 +416,7 @@
     {"lua_rawget", (luaV_function) &dll_lua_rawget},
     {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
     {"lua_createtable", (luaV_function) &dll_lua_createtable},
+    {"lua_settable", (luaV_function) &dll_lua_settable},
 #if LUA_VERSION_NUM >= 504
     {"lua_newuserdatauv", (luaV_function) &dll_lua_newuserdatauv},
 #else
@@ -1819,7 +1823,7 @@
     if (dict == NULL)
 	return 0;
 
-    di = dict_find(dict, (char_u *)name, len);
+    di = dict_find(dict, (char_u *)name, (int)len);
     if (di != NULL)
     {
 	if (di->di_flags & DI_FLAGS_RO)
@@ -1893,8 +1897,8 @@
     dict_T	*dict = luaV_get_var_scope(L);
     size_t	len;
     const char	*name = luaL_checklstring(L, 3, &len);
+    dictitem_T	*di = dict_find(dict, (char_u *)name, (int)len);
 
-    dictitem_T	*di = dict_find(dict, (char_u *)name, len);
     if (di == NULL)
 	return 0;  // nil
 
@@ -1905,7 +1909,10 @@
     static int
 luaV_command(lua_State *L)
 {
-    do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
+    char_u  *s = vim_strsave((char_u *)luaL_checkstring(L, 1));
+
+    execute_cmds_from_string(s);
+    vim_free(s);
     update_screen(VALID);
     return 0;
 }
@@ -1914,6 +1921,7 @@
 luaV_eval(lua_State *L)
 {
     typval_T *tv = eval_expr((char_u *) luaL_checkstring(L, 1), NULL);
+
     if (tv == NULL) luaL_error(L, "invalid expression");
     luaV_pushtypval(L, tv);
     free_tv(tv);
@@ -2214,6 +2222,25 @@
 	return luaL_error(L, error);
 }
 
+/*
+ * Return the Vim version as a Lua table
+ */
+    static int
+luaV_version(lua_State *L)
+{
+    lua_newtable(L);
+    lua_pushstring(L, "major");
+    lua_pushinteger(L, VIM_VERSION_MAJOR);
+    lua_settable(L, -3);
+    lua_pushstring(L, "minor");
+    lua_pushinteger(L, VIM_VERSION_MINOR);
+    lua_settable(L, -3);
+    lua_pushstring(L, "patch");
+    lua_pushinteger(L, highest_patch());
+    lua_settable(L, -3);
+    return 1;
+}
+
 static const luaL_Reg luaV_module[] = {
     {"command", luaV_command},
     {"eval", luaV_eval},
@@ -2230,6 +2257,7 @@
     {"call", luaV_call},
     {"_getvar", luaV_getvar},
     {"_setvar", luaV_setvar},
+    {"version", luaV_version},
     {"lua_version", NULL},
     {NULL, NULL}
 };
diff --git a/src/proto/evalfunc.pro b/src/proto/evalfunc.pro
index 5bb38b0..eb89e64 100644
--- a/src/proto/evalfunc.pro
+++ b/src/proto/evalfunc.pro
@@ -17,6 +17,7 @@
 buf_T *get_buf_arg(typval_T *arg);
 win_T *get_optional_window(typval_T *argvars, int idx);
 void execute_redir_str(char_u *value, int value_len);
+void execute_cmds_from_string(char_u *str);
 void execute_common(typval_T *argvars, typval_T *rettv, int arg_off);
 void f_exists(typval_T *argvars, typval_T *rettv);
 void f_has(typval_T *argvars, typval_T *rettv);
diff --git a/src/testdir/test_lua.vim b/src/testdir/test_lua.vim
index 94e3cec..dd493fe 100644
--- a/src/testdir/test_lua.vim
+++ b/src/testdir/test_lua.vim
@@ -1162,4 +1162,36 @@
   %bw!
 endfunc
 
+" Test for vim.version()
+func Test_lua_vim_version()
+  lua << trim END
+    vimver = vim.version()
+    vimver_n = vimver.major * 100 + vimver.minor
+  END
+  call assert_equal(v:version, luaeval('vimver_n'))
+endfunc
+
+" Test for running multiple commands using vim.command()
+func Test_lua_multiple_commands()
+  lua << trim END
+    vim.command([[
+        let Var1 = []
+        for i in range(3)
+          let Var1 += [#{name: 'x'}]
+        endfor
+        augroup Luagroup
+          autocmd!
+          autocmd User Luatest echo 'Hello'
+        augroup END
+      ]])
+  END
+  call assert_equal([{'name': 'x'}, {'name': 'x'}, {'name': 'x'}], Var1)
+  call assert_true(exists('#Luagroup'))
+  call assert_true(exists('#Luagroup#User#Luatest'))
+  augroup Luagroup
+    autocmd!
+  augroup END
+  augroup! Luagroup
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_shell.vim b/src/testdir/test_shell.vim
index f5a3e98..bdc6631 100644
--- a/src/testdir/test_shell.vim
+++ b/src/testdir/test_shell.vim
@@ -84,7 +84,8 @@
         r !echo hello
         call assert_equal('hello', substitute(getline(2), '\W', '', 'g'), e[0])
       catch
-        call assert_report('Failed to run shell command, shell: ' .. e[0])
+        call assert_report('Failed to run shell command, shell: ' .. e[0]
+              \ .. ', caught ' .. v:exception)
       finally
         bwipe!
       endtry
diff --git a/src/version.c b/src/version.c
index 6518b3b..096fcf2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3300,
+/**/
     3299,
 /**/
     3298,
