diff --git a/.gitignore b/.gitignore
index 1c7d39299fdb1c51e2502e9a420be7b47de2519b..9165f52aa357e8338c6baca5faf510291ef9ad55 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,6 +62,7 @@ third_party/luajit/src/lj_libdef.h
 third_party/luajit/src/lj_recdef.h
 third_party/luajit/src/lj_vm.s
 VERSION
+!FreeBSD/databases/tarantool/Makefile
 src/00000000000000000001.snap
 
 doc/sphinx/_build/*
diff --git a/FreeBSD/databases/tarantool/Makefile b/FreeBSD/databases/tarantool/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..436b5d41626ba63648536e62ecc31afe9403cea2
--- /dev/null
+++ b/FreeBSD/databases/tarantool/Makefile
@@ -0,0 +1,70 @@
+# Created by: Veniamin Gvozdikov <vg@FreeBSD.org>
+# $FreeBSD$
+
+PORTNAME=	tarantool
+PORTVERSION=	1.6.5
+CATEGORIES=	databases
+MASTER_SITES=	http://tarantool.org/dist/master/
+DISTNAME=	${PORTNAME}-${PORTVERSION}-${TR_REV}-src
+
+MAINTAINER=	vg@FreeBSD.org
+COMMENT=	High performance key/value storage server
+
+LICENSE=	BSD2CLAUSE
+
+TR_REV=		212-g49781b3
+MAKE_JOBS_UNSAFE=yes
+USES=		cmake compiler:c++11-lang gmake perl5 readline
+USE_GCC=	4.9+
+USE_LDCONFIG=	yes
+USE_RC_SUBR=	${PORTNAME}
+SUB_FILES=	pkg-message
+
+TT_DATADIR?=	/var/db/tarantool
+TT_RUNDIR?=	/var/run/tarantool
+TT_LOGDIR?=	/var/log/tarantool
+
+CMAKE_ARGS=	-DCMAKE_INSTALL_MANDIR=man \
+		-DCMAKE_INSTALL_SYSCONFDIR=${ETCDIR} \
+		-DCMAKE_LOCALSTATE_DIR=${DATADIR} \
+		-DTARANTOOL_DATADIR="${TT_DATADIR}"
+
+USERS=		tarantool
+GROUPS=		tarantool
+
+SUB_LIST+=	PORTNAME=${PORTNAME} \
+	TT_USER=${USERS} \
+	TT_DATADIR=${TT_DATADIR} \
+	TT_LOGDIR=${TT_LOGDIR} \
+	TT_RUNDIR=${TT_RUNDIR}
+
+PLIST_SUB+=	TT_USER=${USERS} \
+	TT_GROUP=${GROUPS} \
+	TT_LOGDIR=${TT_LOGDIR} \
+	TT_DATADIR=${TT_DATADIR} \
+	TT_RUNDIR=${TT_RUNDIR}
+
+OPTIONS_DEFINE=	DEBUG
+DEBUG_DESC=	Enable debug
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MDEBUG}
+CMAKE_BUILD_TYPE=	RelWithDebugInfo
+CMAKE_ARGS+=	-DENABLE_BACKTRACE=ON
+.else
+CMAKE_BUILD_TYPE=	Rel
+CMAKE_ARGS+=	-DENABLE_BACKTRACE=OFF
+.endif
+
+.if ${OSVERSION} < 900000
+BROKEN=		Does not build on FreeBSD < 9.0
+.endif
+
+post-install:
+	${MKDIR} ${STAGEDIR}${TT_LOGDIR} \
+		${STAGEDIR}${TT_DATADIR} \
+		${STAGEDIR}${TT_RUNDIR} \
+		${STAGEDIR}${ETCDIR}/instances.enabled
+
+.include <bsd.port.mk>
diff --git a/FreeBSD/databases/tarantool/distinfo b/FreeBSD/databases/tarantool/distinfo
index 4ff5f33476ccf4cf55003241a161cbb3021f623e..688970297f08d63de6c5f73b3b679bf9143dcd25 100644
--- a/FreeBSD/databases/tarantool/distinfo
+++ b/FreeBSD/databases/tarantool/distinfo
@@ -1,2 +1,2 @@
-SHA256 (tarantool-1.4.9-45-g2f7b3f9-src.tar.gz) = 45c37824c0f2cef8746523347ba727ced98e8c21eec17e11729d6ff38d1f7bbd
-SIZE (tarantool-1.4.9-45-g2f7b3f9-src.tar.gz) = 2772012
+SHA256 (tarantool-1.6.5-212-g49781b3-src.tar.gz) = 922c38bfca523f27696ed64e6aaeb100224a92709057c567e840059188e109a0
+SIZE (tarantool-1.6.5-212-g49781b3-src.tar.gz) = 3671835
diff --git a/FreeBSD/databases/tarantool/files/pkg-message.in b/FreeBSD/databases/tarantool/files/pkg-message.in
index fa50213a377e1ea244009551b0ba079bd887d9c9..1d5a808cd5b01e6c52b5770a89e112eba917d414 100644
--- a/FreeBSD/databases/tarantool/files/pkg-message.in
+++ b/FreeBSD/databases/tarantool/files/pkg-message.in
@@ -3,11 +3,12 @@
 #
 #        After install you'll need:
 #
-#    Edit example config:
-#    %%ETCDIR%%/tarantool.cfg.sample
-#    Init storage:
-#    %%PREFIX%%/bin/tarantool_box --init-storage \
-#      -c %%ETCDIR%%/tarantool.cfg
+#    Configuration at /etc/rc.conf:
+#
+#   * Enable tarantool on startup:
+#      tarantool_enable="YES"
+#   * Path to storage instances:
+#      tarantool_instances="%%ETCDIR%%/instances.enabled"
 #
 #
 #########################################################
diff --git a/FreeBSD/databases/tarantool/files/tarantool.in b/FreeBSD/databases/tarantool/files/tarantool.in
old mode 100755
new mode 100644
index 993869385d8f8b87e9b468f2e4d713567635b955..98ea8dd888d33a52af8c5167676a0975f87b6117
--- a/FreeBSD/databases/tarantool/files/tarantool.in
+++ b/FreeBSD/databases/tarantool/files/tarantool.in
@@ -1,13 +1,13 @@
 #!/bin/sh
 #
-# $FreeBSD: databases/tarantool/files/tarantool.in 308708 2012-12-11 20:00:36Z rm $
+# $FreeBSD$
 
 # PROVIDE: tarantool
 # REQUIRE: LOGIN
 # KEYWORD: shutdown
 #
 # tarantool_enable="YES"
-# tarantool_config=""
+# tarantool_instances=""
 #
 
 . /etc/rc.subr
@@ -18,10 +18,38 @@ rcvar=tarantool_enable
 load_rc_config "$name"
 
 tarantool_enable=${tarantool_enable:-"NO"}
-tarantool_config=${tarantool_config:-"%%ETCDIR%%/$name.cfg"}
+tarantool_instances=${tarantool_instances:-"%%ETCDIR%%/instances.enabled"}
 
-command="%%PREFIX%%/bin/tarantool_box"
-command_args="--daemonize --config ${tarantool_config}"
-pidfile="/var/run/$name.pid"
+start_cmd="${name}_start"
+stop_cmd="${name}_stop"
+restart_cmd="${name}_restart"
+
+INSTANCES=$(find ${tarantool_instances} -type f -name '*.lua')
+TDAEMON=%%PREFIX%%/bin/tarantool
+TCTL=%%PREFIX%%/bin/tarantoolctl
+
+tarantool_start()
+{
+	echo "tarantool: Starting instances"
+	for inst in ${INSTANCES}
+	do
+		${TDAEMON} ${TCTL} start $(basename ${inst} .lua)
+	done
+}
+
+tarantool_stop()
+{
+	echo "tarantool: Stopping instances"
+	for inst in ${INSTANCES}
+	do
+		${TDAEMON} ${TCTL} stop $(basename ${inst} .lua)
+	done
+}
+
+tarantool_restart()
+{
+	tarantool_stop
+	tarantool_start
+}
 
 run_rc_command "$1"
diff --git a/FreeBSD/databases/tarantool/pkg-plist b/FreeBSD/databases/tarantool/pkg-plist
index 5089168473c466bfaeb225194ed9c9f2de82d3eb..fd3258d46fd1a09d051b363f457031505e22d468 100644
--- a/FreeBSD/databases/tarantool/pkg-plist
+++ b/FreeBSD/databases/tarantool/pkg-plist
@@ -1,54 +1,18 @@
-bin/tarantool_box
-bin/tarancheck
-%%CLIENT%%bin/tarantool
-etc/tarantool.cfg.sample
-include/tarantool/tnt.h
-include/tarantool/tnt_buf.h
-include/tarantool/tnt_call.h
-include/tarantool/tnt_delete.h
-include/tarantool/tnt_dir.h
-include/tarantool/tnt_enc.h
-include/tarantool/tnt_insert.h
-include/tarantool/tnt_io.h
-include/tarantool/tnt_iob.h
-include/tarantool/tnt_iter.h
-include/tarantool/tnt_lex.h
-include/tarantool/tnt_log.h
-include/tarantool/tnt_mem.h
-include/tarantool/tnt_net.h
-include/tarantool/tnt_opt.h
-include/tarantool/tnt_ping.h
-include/tarantool/tnt_proto.h
-include/tarantool/tnt_queue.h
-include/tarantool/tnt_reply.h
-include/tarantool/tnt_request.h
-include/tarantool/tnt_rpl.h
-include/tarantool/tnt_select.h
-include/tarantool/tnt_snapshot.h
-include/tarantool/tnt_sql.h
-include/tarantool/tnt_stream.h
-include/tarantool/tnt_tuple.h
-include/tarantool/tnt_update.h
-include/tarantool/tnt_utf8.h
-include/tarantool/tnt_xlog.h
-lib/libtarantoolnet.so.1.1
-lib/libtarantoolrpl.so.1
-lib/libtarantoolnet.a
-lib/libtarantoolnet.so
-lib/libtarantool.a
-lib/libtarantoolnet.so.1
-lib/libtarantoolrpl.so
-lib/libtarantoolsql.so.1.1
-lib/libtarantoolsql.a
-lib/libtarantoolsql.so.1
-lib/libtarantoolrpl.so.1.1
-lib/libtarantool.so.1
-lib/libtarantoolsql.so
-lib/libtarantool.so.1.1
-lib/libtarantoolrpl.a
-lib/libtarantool.so
-%%DOCSDIR%%/README.md
-%%DOCSDIR%%/box-protocol.txt
-%%DOCSDIR%%/LICENSE
-@dirrm %%DOCSDIR%%
-@dirrm include/tarantool
+bin/tarantool
+bin/tarantoolctl
+%%ETCDIR%%/default/tarantool
+include/tarantool/lauxlib.h
+include/tarantool/lua.h
+include/tarantool/lua.hpp
+include/tarantool/luaconf.h
+include/tarantool/luajit.h
+include/tarantool/lualib.h
+include/tarantool/tarantool.h
+man/man1/tarantool.1.gz
+man/man1/tarantoolctl.1.gz
+%%PORTDOCS%%%%DOCSDIR%%/LICENSE
+%%PORTDOCS%%%%DOCSDIR%%/README.md
+@dir %%ETCDIR%%/instances.enabled
+@dir(%%TT_USER%%,%%TT_GROUP%%,) %%TT_DATADIR%%
+@dir(%%TT_USER%%,%%TT_GROUP%%,) %%TT_LOGDIR%%
+@dir(%%TT_USER%%,%%TT_GROUP%%,) %%TT_RUNDIR%%
diff --git a/extra/dist/CMakeLists.txt b/extra/dist/CMakeLists.txt
index 848aaa80612ba514aad94639b19125eefbbbe3a5..23948b4adaeee90841f18de92369e7a470453fb9 100644
--- a/extra/dist/CMakeLists.txt
+++ b/extra/dist/CMakeLists.txt
@@ -1,6 +1,13 @@
 # Scripts for a tarantoolctl packaging
 set(SYSV_INITD_PATH ${CMAKE_INSTALL_LIBDIR}/tarantool/tarantool.init)
+# Default path to data in default/tarantool
+if (NOT TARANTOOL_DATADIR)
+    set(TARANTOOL_DATADIR "/var/lib/tarantool")
+endif()
+message (STATUS "TARANTOOL_DATADIR: ${TARANTOOL_DATADIR}")
+
 configure_file("tarantool.service.in" "tarantool.service")
+configure_file(default/tarantool.in default/tarantool)
 
 if (ENABLE_RPM)
     # chmod +x 655
diff --git a/extra/dist/default/tarantool b/extra/dist/default/tarantool
deleted file mode 100644
index a861bdf5f135e95405a28eab718517f5992537d6..0000000000000000000000000000000000000000
--- a/extra/dist/default/tarantool
+++ /dev/null
@@ -1,13 +0,0 @@
--- Options for Tarantool
-default_cfg = {
-    pid_file   = "/var/run/tarantool", -- will become pid_file .. instance .. '.pid'
-    wal_dir    = "/var/lib/tarantool", -- will become wal_dir/instance/
-    snap_dir   = "/var/lib/tarantool", -- snap_dir/instance/
-    sophia_dir = "/var/lib/tarantool", -- will become sophia_dir/sophia/instance/
-    logger     = "/var/log/tarantool", -- logger/instance .. '.log'
-    username   = "tarantool",
-}
-
-instance_dir = "/etc/tarantool/instances.enabled"
-
--- vim: set ft=lua :
diff --git a/extra/dist/default/tarantool.in b/extra/dist/default/tarantool.in
new file mode 100644
index 0000000000000000000000000000000000000000..a2220088493e0e5d3f7aab85b0f79d9ed3515c30
--- /dev/null
+++ b/extra/dist/default/tarantool.in
@@ -0,0 +1,13 @@
+-- Options for Tarantool
+default_cfg = {
+    pid_file   = "/var/run/tarantool", -- will become pid_file .. instance .. '.pid'
+    wal_dir    = "@TARANTOOL_DATADIR@", -- will become wal_dir/instance/
+    snap_dir   = "@TARANTOOL_DATADIR@", -- snap_dir/instance/
+    sophia_dir = "@TARANTOOL_DATADIR@", -- will become sophia_dir/sophia/instance/
+    logger     = "/var/log/tarantool", -- logger/instance .. '.log'
+    username   = "tarantool",
+}
+
+instance_dir = "@CMAKE_INSTALL_SYSCONFDIR@/tarantool/instances.enabled"
+
+-- vim: set ft=lua :
diff --git a/extra/dist/tarantoolctl b/extra/dist/tarantoolctl
index 9c97ab617fd016f50facdd5fa52f9ce81db6f522..ef78b4df4a4d0f178992778638030b7effd28a11 100755
--- a/extra/dist/tarantoolctl
+++ b/extra/dist/tarantoolctl
@@ -220,7 +220,7 @@ local function find_default_file()
     local config_list = {
         '/etc/sysconfig/tarantool',
         '/etc/default/tarantool',
-        '/usr/local/etc/tarantool/tarantool',
+        '/usr/local/etc/tarantool/default/tarantool',
     }
     for _, c in pairs(config_list) do
         if fio.stat(c) then