diff --git a/client/tarantool/tnt.c b/client/tarantool/tnt.c
index f42574e4e7cea8f6c5fb649c95fe80ab3ef80657..1b46a41892e8baa51d034ed02838801e135e2b94 100644
--- a/client/tarantool/tnt.c
+++ b/client/tarantool/tnt.c
@@ -39,9 +39,9 @@
 #include <errcode.h>
 #include <third_party/gopt/gopt.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_sql.h>
-#include <connector/c/include/libtnt/tnt_net.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_sql.h>
+#include <connector/c/include/tarantool/tnt_net.h>
 
 #include <client/tarantool/tnt_admin.h>
 
diff --git a/connector/c/CMakeLists.txt b/connector/c/CMakeLists.txt
index 1d94e5179d3545d57a4afadccd69d65489b9af9c..a5b023096a7dc417a56e57cbef59faa8ce3b180f 100644
--- a/connector/c/CMakeLists.txt
+++ b/connector/c/CMakeLists.txt
@@ -1,3 +1,10 @@
+
+#
+# library soname version
+#
+set(LIBTNT_VERSION   "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+set(LIBTNT_SOVERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}")
+
 add_subdirectory(tnt)
 add_subdirectory(tntsql)
 add_subdirectory(tntnet)
diff --git a/connector/c/include/CMakeLists.txt b/connector/c/include/CMakeLists.txt
index ced3d1c21177cbd549567c189ccf96b7dbe31a29..a47ec7c2e8a6c20f4154ebb04905fc10902ed634 100644
--- a/connector/c/include/CMakeLists.txt
+++ b/connector/c/include/CMakeLists.txt
@@ -3,4 +3,4 @@
 # installation of tarantool C client library headers
 #
 
-install(DIRECTORY libtnt DESTINATION include)
+install(DIRECTORY tarantool DESTINATION include)
diff --git a/connector/c/include/libtnt/tnt.h b/connector/c/include/tarantool/tnt.h
similarity index 76%
rename from connector/c/include/libtnt/tnt.h
rename to connector/c/include/tarantool/tnt.h
index cd99df63b3530d0a62a1117809e6e57393f08502..c67e012424c805c29cd9e73f0d98736e9044d79d 100644
--- a/connector/c/include/libtnt/tnt.h
+++ b/connector/c/include/tarantool/tnt.h
@@ -33,20 +33,20 @@ extern "C" {
 #include <stdint.h>
 #include <stdarg.h>
 
-#include <libtnt/tnt_mem.h>
-#include <libtnt/tnt_proto.h>
-#include <libtnt/tnt_enc.h>
-#include <libtnt/tnt_tuple.h>
-#include <libtnt/tnt_reply.h>
-#include <libtnt/tnt_stream.h>
-#include <libtnt/tnt_iter.h>
-#include <libtnt/tnt_buf.h>
-#include <libtnt/tnt_ping.h>
-#include <libtnt/tnt_insert.h>
-#include <libtnt/tnt_update.h>
-#include <libtnt/tnt_delete.h>
-#include <libtnt/tnt_call.h>
-#include <libtnt/tnt_select.h>
+#include <tarantool/tnt_mem.h>
+#include <tarantool/tnt_proto.h>
+#include <tarantool/tnt_enc.h>
+#include <tarantool/tnt_tuple.h>
+#include <tarantool/tnt_reply.h>
+#include <tarantool/tnt_stream.h>
+#include <tarantool/tnt_iter.h>
+#include <tarantool/tnt_buf.h>
+#include <tarantool/tnt_ping.h>
+#include <tarantool/tnt_insert.h>
+#include <tarantool/tnt_update.h>
+#include <tarantool/tnt_delete.h>
+#include <tarantool/tnt_call.h>
+#include <tarantool/tnt_select.h>
 
 #ifdef __cplusplus
 } /* extern "C" */
diff --git a/connector/c/include/libtnt/tnt_buf.h b/connector/c/include/tarantool/tnt_buf.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_buf.h
rename to connector/c/include/tarantool/tnt_buf.h
diff --git a/connector/c/include/libtnt/tnt_call.h b/connector/c/include/tarantool/tnt_call.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_call.h
rename to connector/c/include/tarantool/tnt_call.h
diff --git a/connector/c/include/libtnt/tnt_delete.h b/connector/c/include/tarantool/tnt_delete.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_delete.h
rename to connector/c/include/tarantool/tnt_delete.h
diff --git a/connector/c/include/libtnt/tnt_enc.h b/connector/c/include/tarantool/tnt_enc.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_enc.h
rename to connector/c/include/tarantool/tnt_enc.h
diff --git a/connector/c/include/libtnt/tnt_insert.h b/connector/c/include/tarantool/tnt_insert.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_insert.h
rename to connector/c/include/tarantool/tnt_insert.h
diff --git a/connector/c/include/libtnt/tnt_io.h b/connector/c/include/tarantool/tnt_io.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_io.h
rename to connector/c/include/tarantool/tnt_io.h
diff --git a/connector/c/include/libtnt/tnt_iob.h b/connector/c/include/tarantool/tnt_iob.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_iob.h
rename to connector/c/include/tarantool/tnt_iob.h
diff --git a/connector/c/include/libtnt/tnt_iter.h b/connector/c/include/tarantool/tnt_iter.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_iter.h
rename to connector/c/include/tarantool/tnt_iter.h
diff --git a/connector/c/include/libtnt/tnt_lex.h b/connector/c/include/tarantool/tnt_lex.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_lex.h
rename to connector/c/include/tarantool/tnt_lex.h
diff --git a/connector/c/include/libtnt/tnt_mem.h b/connector/c/include/tarantool/tnt_mem.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_mem.h
rename to connector/c/include/tarantool/tnt_mem.h
diff --git a/connector/c/include/libtnt/tnt_net.h b/connector/c/include/tarantool/tnt_net.h
similarity index 97%
rename from connector/c/include/libtnt/tnt_net.h
rename to connector/c/include/tarantool/tnt_net.h
index c9249744bbd75fd91b1875dc4dfcb70986d4dcd4..19ada6ee09c482e5c8868970dcb2701e6aa0f86c 100644
--- a/connector/c/include/libtnt/tnt_net.h
+++ b/connector/c/include/tarantool/tnt_net.h
@@ -32,8 +32,8 @@
 #include <sys/types.h>
 #include <sys/time.h>
 
-#include <libtnt/tnt_opt.h>
-#include <libtnt/tnt_iob.h>
+#include <tarantool/tnt_opt.h>
+#include <tarantool/tnt_iob.h>
 
 enum tnt_error {
 	TNT_EOK,
diff --git a/connector/c/include/libtnt/tnt_opt.h b/connector/c/include/tarantool/tnt_opt.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_opt.h
rename to connector/c/include/tarantool/tnt_opt.h
diff --git a/connector/c/include/libtnt/tnt_ping.h b/connector/c/include/tarantool/tnt_ping.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_ping.h
rename to connector/c/include/tarantool/tnt_ping.h
diff --git a/connector/c/include/libtnt/tnt_proto.h b/connector/c/include/tarantool/tnt_proto.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_proto.h
rename to connector/c/include/tarantool/tnt_proto.h
diff --git a/connector/c/include/libtnt/tnt_queue.h b/connector/c/include/tarantool/tnt_queue.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_queue.h
rename to connector/c/include/tarantool/tnt_queue.h
diff --git a/connector/c/include/libtnt/tnt_reply.h b/connector/c/include/tarantool/tnt_reply.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_reply.h
rename to connector/c/include/tarantool/tnt_reply.h
diff --git a/connector/c/include/libtnt/tnt_select.h b/connector/c/include/tarantool/tnt_select.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_select.h
rename to connector/c/include/tarantool/tnt_select.h
diff --git a/connector/c/include/libtnt/tnt_sql.h b/connector/c/include/tarantool/tnt_sql.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_sql.h
rename to connector/c/include/tarantool/tnt_sql.h
diff --git a/connector/c/include/libtnt/tnt_stream.h b/connector/c/include/tarantool/tnt_stream.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_stream.h
rename to connector/c/include/tarantool/tnt_stream.h
diff --git a/connector/c/include/libtnt/tnt_tuple.h b/connector/c/include/tarantool/tnt_tuple.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_tuple.h
rename to connector/c/include/tarantool/tnt_tuple.h
diff --git a/connector/c/include/libtnt/tnt_update.h b/connector/c/include/tarantool/tnt_update.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_update.h
rename to connector/c/include/tarantool/tnt_update.h
diff --git a/connector/c/include/libtnt/tnt_utf8.h b/connector/c/include/tarantool/tnt_utf8.h
similarity index 100%
rename from connector/c/include/libtnt/tnt_utf8.h
rename to connector/c/include/tarantool/tnt_utf8.h
diff --git a/connector/c/tnt/CMakeLists.txt b/connector/c/tnt/CMakeLists.txt
index f0add390210e8afc0e51a1ef4927c01a6f79c27f..7f0899314410d73decdea91a9a691453fd6a5a53 100644
--- a/connector/c/tnt/CMakeLists.txt
+++ b/connector/c/tnt/CMakeLists.txt
@@ -48,19 +48,21 @@ string(REPLACE "-static" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 #
 # Static library
 #
-
 project(tnt)
 add_library(tnt STATIC ${tnt_sources})
 set_target_properties(tnt PROPERTIES COMPILE_FLAGS "${tnt_cflags}")
+set_target_properties(tnt PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tnt PROPERTIES OUTPUT_NAME "tarantool")
 
 #
 # Shared library
 #
-
 project(tnt_shared)
 add_library(tnt_shared SHARED ${tnt_sources})
 set_target_properties(tnt_shared PROPERTIES OUTPUT_NAME tnt)
 set_target_properties(tnt_shared PROPERTIES COMPILE_FLAGS "${tnt_cflags}")
+set_target_properties(tnt_shared PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tnt_shared PROPERTIES OUTPUT_NAME "tarantool")
 
 #----------------------------------------------------------------------------#
 # Install
diff --git a/connector/c/tnt/tnt_buf.c b/connector/c/tnt/tnt_buf.c
index 6889ae819ce3ecac78401ff1bfd19cfe3903dccf..358caa08d86950986bda562213db34238002a3db 100644
--- a/connector/c/tnt/tnt_buf.c
+++ b/connector/c/tnt/tnt_buf.c
@@ -28,11 +28,11 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_buf.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_buf.h>
 
 static struct tnt_stream *tnt_buf_tryalloc(struct tnt_stream *s) {
 	if (s) {
diff --git a/connector/c/tnt/tnt_call.c b/connector/c/tnt/tnt_call.c
index e33d57e13a921ed62f5c8ebebefe75ada016c093..529c986c5a7dda1ebd1c10ec2c2cbcc7873a06cd 100644
--- a/connector/c/tnt/tnt_call.c
+++ b/connector/c/tnt/tnt_call.c
@@ -28,12 +28,12 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_enc.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_call.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_enc.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_call.h>
 
 struct tnt_header_call {
 	uint32_t flags;
diff --git a/connector/c/tnt/tnt_delete.c b/connector/c/tnt/tnt_delete.c
index 40ca890d169f9e8428bf447e027ad7c1bb6fe562..8539a7c326648964b6826d777d7c5678f3d1f787 100644
--- a/connector/c/tnt/tnt_delete.c
+++ b/connector/c/tnt/tnt_delete.c
@@ -28,11 +28,11 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_delete.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_delete.h>
 
 struct tnt_header_delete {
 	uint32_t ns;
diff --git a/connector/c/tnt/tnt_enc.c b/connector/c/tnt/tnt_enc.c
index 3821ef9b6900b670e1512bc2ba3617c143a41d74..b34993746ba7f900a7cb5ea34a864063e8b7cb6a 100644
--- a/connector/c/tnt/tnt_enc.c
+++ b/connector/c/tnt/tnt_enc.c
@@ -28,7 +28,7 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_enc.h>
+#include <connector/c/include/tarantool/tnt_enc.h>
 
 int
 tnt_enc_read(char *buf, uint32_t *value)
diff --git a/connector/c/tnt/tnt_insert.c b/connector/c/tnt/tnt_insert.c
index 334dbc89a385eb96bc2f6e8543514f10bf8a08be..fc60becd60d38dc16ad92d07adea73a257dd86ba 100644
--- a/connector/c/tnt/tnt_insert.c
+++ b/connector/c/tnt/tnt_insert.c
@@ -28,11 +28,11 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_insert.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_insert.h>
 
 struct tnt_header_insert {
 	uint32_t ns;
diff --git a/connector/c/tnt/tnt_iter.c b/connector/c/tnt/tnt_iter.c
index 653aa4a570afbf04d5fdac666314ba274a7347e9..6fd00584853e6d133020614166ed86689d120815 100644
--- a/connector/c/tnt/tnt_iter.c
+++ b/connector/c/tnt/tnt_iter.c
@@ -28,12 +28,12 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
-#include <connector/c/include/libtnt/tnt_enc.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_iter.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_enc.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_iter.h>
 
 static struct tnt_iter *tnt_iter_tryalloc(struct tnt_iter *i) {
 	if (i) {
diff --git a/connector/c/tnt/tnt_mem.c b/connector/c/tnt/tnt_mem.c
index e257a7d604a7c08ac99fa27828029dae3a2cbc62..4a5e33f353bf32145e7497c6eefd3a07cd27bfc7 100644
--- a/connector/c/tnt/tnt_mem.c
+++ b/connector/c/tnt/tnt_mem.c
@@ -28,7 +28,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
 
 static void *(*_tnt_realloc)(void *ptr, size_t size) =
 	(void *(*)(void*, size_t))realloc;
diff --git a/connector/c/tnt/tnt_ping.c b/connector/c/tnt/tnt_ping.c
index 63aa9c182911cd8c28d0a1d818c15c84f10f33b6..674c38a950c43b04c9edf642ca7c945a909139d4 100644
--- a/connector/c/tnt/tnt_ping.c
+++ b/connector/c/tnt/tnt_ping.c
@@ -28,11 +28,11 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_ping.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_ping.h>
 
 /*
  * tnt_ping()
diff --git a/connector/c/tnt/tnt_reply.c b/connector/c/tnt/tnt_reply.c
index 4186252112cbae62214715469146b0f7ae75efc6..5e282621d0660e8fad8fdc49cff5c3bb34c24de2 100644
--- a/connector/c/tnt/tnt_reply.c
+++ b/connector/c/tnt/tnt_reply.c
@@ -28,10 +28,10 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
 
 /*
  * tnt_reply_init()
diff --git a/connector/c/tnt/tnt_select.c b/connector/c/tnt/tnt_select.c
index dde0104347414bf9e3b0d442d6c05db6e08e2eeb..30e0e63947ba14944f90a943bc3f5f58e30482d9 100644
--- a/connector/c/tnt/tnt_select.c
+++ b/connector/c/tnt/tnt_select.c
@@ -28,13 +28,13 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
-#include <connector/c/include/libtnt/tnt_proto.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
-#include <connector/c/include/libtnt/tnt_iter.h>
-#include <connector/c/include/libtnt/tnt_select.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_proto.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_iter.h>
+#include <connector/c/include/tarantool/tnt_select.h>
 
 struct tnt_header_select {
 	uint32_t ns;
diff --git a/connector/c/tnt/tnt_stream.c b/connector/c/tnt/tnt_stream.c
index e43eaa2966c1e348f5710f8538ca825f03c1c947..076707886436094d1f3933598338880916421d3f 100644
--- a/connector/c/tnt/tnt_stream.c
+++ b/connector/c/tnt/tnt_stream.c
@@ -28,10 +28,10 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt_mem.h>
-#include <connector/c/include/libtnt/tnt_tuple.h>
-#include <connector/c/include/libtnt/tnt_reply.h>
-#include <connector/c/include/libtnt/tnt_stream.h>
+#include <connector/c/include/tarantool/tnt_mem.h>
+#include <connector/c/include/tarantool/tnt_tuple.h>
+#include <connector/c/include/tarantool/tnt_reply.h>
+#include <connector/c/include/tarantool/tnt_stream.h>
 
 /*
  * tnt_stream_reqid()
diff --git a/connector/c/tnt/tnt_tuple.c b/connector/c/tnt/tnt_tuple.c
index 18a5aad3455b7e1e41fa4ef5846e48321e9fbf9e..c55a2ab7a49c07cf8a973b0ad73118fa65f8c66c 100644
--- a/connector/c/tnt/tnt_tuple.c
+++ b/connector/c/tnt/tnt_tuple.c
@@ -30,9 +30,9 @@
 #include <string.h>
 #include <ctype.h>
 
-#include <libtnt/tnt_mem.h>
-#include <libtnt/tnt_enc.h>
-#include <libtnt/tnt_tuple.h>
+#include <tarantool/tnt_mem.h>
+#include <tarantool/tnt_enc.h>
+#include <tarantool/tnt_tuple.h>
 
 /*
  * tnt_tuple_init()
diff --git a/connector/c/tnt/tnt_update.c b/connector/c/tnt/tnt_update.c
index e7de0f26cc6c66391475bae0f3233576588a6cd4..e796b776a9d9b6b77c815953d5e892097b29d010 100644
--- a/connector/c/tnt/tnt_update.c
+++ b/connector/c/tnt/tnt_update.c
@@ -28,14 +28,14 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <libtnt/tnt_mem.h>
-#include <libtnt/tnt_proto.h>
-#include <libtnt/tnt_enc.h>
-#include <libtnt/tnt_tuple.h>
-#include <libtnt/tnt_reply.h>
-#include <libtnt/tnt_stream.h>
-#include <libtnt/tnt_buf.h>
-#include <libtnt/tnt_update.h>
+#include <tarantool/tnt_mem.h>
+#include <tarantool/tnt_proto.h>
+#include <tarantool/tnt_enc.h>
+#include <tarantool/tnt_tuple.h>
+#include <tarantool/tnt_reply.h>
+#include <tarantool/tnt_stream.h>
+#include <tarantool/tnt_buf.h>
+#include <tarantool/tnt_update.h>
 
 static ssize_t
 tnt_update_op(struct tnt_stream *s,
diff --git a/connector/c/tntnet/CMakeLists.txt b/connector/c/tntnet/CMakeLists.txt
index 4a2bfe6e573bf1befab779faf3f4531d1ca79937..adb4e17a751f319681b7b0713cce37463423e194 100644
--- a/connector/c/tntnet/CMakeLists.txt
+++ b/connector/c/tntnet/CMakeLists.txt
@@ -40,20 +40,22 @@ string(REPLACE "-static" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 #
 # Static library
 #
-
 project(tntnet)
 add_library(tntnet STATIC ${tntnet_sources})
 set_target_properties(tntnet PROPERTIES COMPILE_FLAGS "${tntnet_cflags}")
+set_target_properties(tntnet PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tntnet PROPERTIES OUTPUT_NAME "tarantoolnet")
 
 #
 # Shared library
 #
-
 project(tntnet_shared)
 add_library(tntnet_shared SHARED ${tntnet_sources})
 target_link_libraries(tntnet_shared tnt_shared)
 set_target_properties(tntnet_shared PROPERTIES OUTPUT_NAME tntnet)
 set_target_properties(tntnet_shared PROPERTIES COMPILE_FLAGS "${tntnet_cflags}")
+set_target_properties(tntnet_shared PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tntnet_shared PROPERTIES OUTPUT_NAME "tarantoolnet")
 
 #----------------------------------------------------------------------------#
 # Install
diff --git a/connector/c/tntnet/tnt_io.c b/connector/c/tntnet/tnt_io.c
index f4c418b18850b44668245643744d63f2c54417ce..14166659089529ef260face67a211c53fdd77ede 100644
--- a/connector/c/tntnet/tnt_io.c
+++ b/connector/c/tntnet/tnt_io.c
@@ -41,9 +41,9 @@
 #include <errno.h>
 #include <limits.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_net.h>
-#include <connector/c/include/libtnt/tnt_io.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_net.h>
+#include <connector/c/include/tarantool/tnt_io.h>
 
 #if !defined(MIN)
 #	define MIN(a, b) (a) < (b) ? (a) : (b)
diff --git a/connector/c/tntnet/tnt_iob.c b/connector/c/tntnet/tnt_iob.c
index 579af945418985f179802fabd754af0076f5482b..4328a83447f6f3291544b2924f773d8a85468922 100644
--- a/connector/c/tntnet/tnt_iob.c
+++ b/connector/c/tntnet/tnt_iob.c
@@ -31,8 +31,8 @@
 #include <unistd.h>
 #include <sys/uio.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_iob.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_iob.h>
 
 int
 tnt_iob_init(struct tnt_iob *iob, size_t size,
diff --git a/connector/c/tntnet/tnt_net.c b/connector/c/tntnet/tnt_net.c
index b8e0261e1cb8e8ccd9a6a2bce6afa65de2c7f690..e4cf9b792e456ab35391d8dc6d69867b3c379d9a 100644
--- a/connector/c/tntnet/tnt_net.c
+++ b/connector/c/tntnet/tnt_net.c
@@ -29,9 +29,9 @@
 #include <stdarg.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_net.h>
-#include <connector/c/include/libtnt/tnt_io.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_net.h>
+#include <connector/c/include/tarantool/tnt_io.h>
 
 static struct tnt_stream *tnt_net_tryalloc(struct tnt_stream *s) {
 	if (s) {
diff --git a/connector/c/tntnet/tnt_opt.c b/connector/c/tntnet/tnt_opt.c
index ed305c743ff523013fd20c5d40df69a46a8c324b..3b5b9fe766763eddcef9107fa8867d9a25543c98 100644
--- a/connector/c/tntnet/tnt_opt.c
+++ b/connector/c/tntnet/tnt_opt.c
@@ -32,8 +32,8 @@
 #include <sys/types.h>
 #include <sys/time.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_net.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_net.h>
 
 void
 tnt_opt_init(struct tnt_opt *opt)
diff --git a/connector/c/tntsql/CMakeLists.txt b/connector/c/tntsql/CMakeLists.txt
index 9f8336527e07f0b7b592b5700e66c6cea9e74ed5..f88c3838d1fefc045b4bfd71b42e4a3aa372fd5e 100644
--- a/connector/c/tntsql/CMakeLists.txt
+++ b/connector/c/tntsql/CMakeLists.txt
@@ -43,6 +43,8 @@ string(REPLACE "-static" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
 project(tntsql)
 add_library(tntsql STATIC ${tntsql_sources})
 set_target_properties(tntsql PROPERTIES COMPILE_FLAGS "${tntsql_cflags}")
+set_target_properties(tntsql PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tntsql PROPERTIES OUTPUT_NAME "tarantoolsql")
 
 #
 # Shared library
@@ -53,6 +55,8 @@ add_library(tntsql_shared SHARED ${tntsql_sources})
 target_link_libraries(tntsql_shared tnt_shared)
 set_target_properties(tntsql_shared PROPERTIES OUTPUT_NAME tntsql)
 set_target_properties(tntsql_shared PROPERTIES COMPILE_FLAGS "${tntsql_cflags}")
+set_target_properties(tntsql_shared PROPERTIES VERSION ${LIBTNT_VERSION} SOVERSION ${LIBTNT_SOVERSION})
+set_target_properties(tntsql_shared PROPERTIES OUTPUT_NAME "tarantoolsql")
 
 #----------------------------------------------------------------------------#
 # Install
diff --git a/connector/c/tntsql/tnt_lex.c b/connector/c/tntsql/tnt_lex.c
index 680414bc203da2227475f00ec1c1281e964f764a..5ad7b1b5c9e9e79050d867da752abd1d70dbfdf2 100644
--- a/connector/c/tntsql/tnt_lex.c
+++ b/connector/c/tntsql/tnt_lex.c
@@ -33,10 +33,10 @@
 #include <ctype.h>
 #include <errno.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_utf8.h>
-#include <connector/c/include/libtnt/tnt_queue.h>
-#include <connector/c/include/libtnt/tnt_lex.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_utf8.h>
+#include <connector/c/include/tarantool/tnt_queue.h>
+#include <connector/c/include/tarantool/tnt_lex.h>
 
 bool tnt_lex_init(struct tnt_lex *l, unsigned char *buf, size_t size)
 {
diff --git a/connector/c/tntsql/tnt_sql.c b/connector/c/tntsql/tnt_sql.c
index 459efc5a3204b46458dedf5b82c80c7a18d05a50..b8b80c279a9cab8df03f1611e8f3994a0842d162 100644
--- a/connector/c/tntsql/tnt_sql.c
+++ b/connector/c/tntsql/tnt_sql.c
@@ -31,10 +31,10 @@
 #include <string.h>
 #include <ctype.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_queue.h>
-#include <connector/c/include/libtnt/tnt_utf8.h>
-#include <connector/c/include/libtnt/tnt_lex.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_queue.h>
+#include <connector/c/include/tarantool/tnt_utf8.h>
+#include <connector/c/include/tarantool/tnt_lex.h>
 
 /* sql parsing context. */
 
diff --git a/connector/c/tntsql/tnt_utf8.c b/connector/c/tntsql/tnt_utf8.c
index c522029c06755a74ee03d5b48e4f71d7a2ab3f4d..c3753775dc51657e121c89b3ade602cccdb4b9aa 100644
--- a/connector/c/tntsql/tnt_utf8.c
+++ b/connector/c/tntsql/tnt_utf8.c
@@ -30,8 +30,8 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_utf8.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_utf8.h>
 
 bool
 tnt_utf8_init(struct tnt_utf8 *u, unsigned char *data, size_t size)
diff --git a/mod/box/box.m b/mod/box/box.m
index 58d1568d115d8a5cb6e08a2d2c56c1cd4e247224..391402f3d73e06f9518fdfda79fb4f320de63562 100644
--- a/mod/box/box.m
+++ b/mod/box/box.m
@@ -1017,7 +1017,7 @@ prepare_update(struct box_txn *txn, struct tbuf *data)
 	struct update_cmd *cmd = parse_update_cmd(data);
 
 	/* Try to find the tuple. */
-	txn->old_tuple = [txn->index find :cmd->key :cmd->key_cardinality];
+	txn->old_tuple = [txn->index findByKey :cmd->key :cmd->key_cardinality];
 	if (txn->old_tuple == NULL) {
 		/* Not found. For simplicity, skip the logging. */
 		txn->flags |= BOX_NOT_STORE;
@@ -1070,7 +1070,7 @@ process_select(struct box_txn *txn, u32 limit, u32 offset, struct tbuf *data)
 		read_key(data, &key, &key_cardinality);
 
 		struct iterator *it = index->position;
-		[index initIterator: it :ITER_FORWARD :key :key_cardinality];
+		[index initIteratorByKey: it :ITER_FORWARD :key :key_cardinality];
 
 		while ((tuple = it->next_equal(it)) != NULL) {
 			if (tuple->flags & GHOST)
@@ -1101,7 +1101,7 @@ prepare_delete(struct box_txn *txn, struct tbuf *data)
 	void *key;
 	read_key(data, &key, &key_cardinality);
 	/* try to find tuple in primary index */
-	txn->old_tuple = [txn->index find :key :key_cardinality];
+	txn->old_tuple = [txn->index findByKey :key :key_cardinality];
 
 	if (txn->old_tuple == NULL) {
 		/*
diff --git a/mod/box/box_lua.m b/mod/box/box_lua.m
index ef53fbe2a2cf2284c5e909c33b40da2a759bbc28..51da63dc0a8ce7b6ff201723ff4784daaadb29b4 100644
--- a/mod/box/box_lua.m
+++ b/mod/box/box_lua.m
@@ -491,7 +491,7 @@ lbox_index_move(struct lua_State *L, enum iterator_type type)
 				   "does not match index cardinality (%d)",
 				   cardinality, index->key_def->part_count);
 		it = [index allocIterator];
-		[index initIterator: it :type :key :cardinality];
+		[index initIteratorByKey: it :type :key :cardinality];
 		lbox_pushiterator(L, it);
 	} else { /* 1 item on the stack and it's a userdata. */
 		it = lua_checkiterator(L, 2);
diff --git a/mod/box/index.h b/mod/box/index.h
index 99a6d72dc80987f7f8c1eb8abad5d0f9b7502bc8..8473edabbbddab00b4e70982d0542f7cd1752d7a 100644
--- a/mod/box/index.h
+++ b/mod/box/index.h
@@ -117,7 +117,7 @@ struct key_def {
 - (size_t) size;
 - (struct box_tuple *) min;
 - (struct box_tuple *) max;
-- (struct box_tuple *) find: (void *) key :(int) key_cardinality;
+- (struct box_tuple *) findByKey: (void *) key :(int) part_count;
 - (struct box_tuple *) findByTuple: (struct box_tuple *) tuple;
 - (void) remove: (struct box_tuple *) tuple;
 - (void) replace: (struct box_tuple *) old_tuple :(struct box_tuple *) new_tuple;
@@ -126,10 +126,22 @@ struct key_def {
  * initialized separately.
  */
 - (struct iterator *) allocIterator;
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type;
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-			:(void *) key
-			:(int) part_count;
+- (void) initIterator: (struct iterator *) iterator
+			:(enum iterator_type) type;
+- (void) initIteratorByKey: (struct iterator *) iterator
+			:(enum iterator_type) type
+			:(void *) key :(int) part_count;
+/**
+ * Check key cardinality.
+ */
+- (void) checkKeyParts: (int) part_count :(bool) partial_key_allowed;
+/**
+ * Unsafe search methods that do not check key cardinality.
+ */
+- (struct box_tuple *) findUnsafe: (void *) key :(int) part_count;
+- (void) initIteratorUnsafe: (struct iterator *) iterator
+			:(enum iterator_type) type
+			:(void *) key :(int) part_count;
 @end
 
 struct iterator {
diff --git a/mod/box/index.m b/mod/box/index.m
index 5d0e48cc2079a388aafb5767918b37f81682f497..5d6bdb97a554245f1641b1d0f566c21f1ca10dd2 100644
--- a/mod/box/index.m
+++ b/mod/box/index.m
@@ -131,10 +131,16 @@ iterator_first_equal(struct iterator *it)
 	return NULL;
 }
 
-- (struct box_tuple *) find: (void *) key :(int) key_cardinality
+- (struct box_tuple *) findByKey: (void *) key :(int) part_count
+{
+	[self checkKeyParts: part_count :false];
+	return [self findUnsafe: key :part_count];
+}
+
+- (struct box_tuple *) findUnsafe: (void *) key :(int) part_count
 {
 	(void) key;
-	(void) key_cardinality;
+	(void) part_count;
 	[self subclassResponsibility: _cmd];
 	return NULL;
 }
@@ -173,16 +179,33 @@ iterator_first_equal(struct iterator *it)
 	[self subclassResponsibility: _cmd];
 }
 
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-                        :(void *) key
-			:(int) key_cardinality
+- (void) initIteratorByKey: (struct iterator *) iterator :(enum iterator_type) type
+                        :(void *) key :(int) part_count
+{
+	[self checkKeyParts: part_count :true];
+	[self initIteratorUnsafe: iterator :type :key :part_count];
+}
+
+- (void) initIteratorUnsafe: (struct iterator *) iterator :(enum iterator_type) type
+                        :(void *) key :(int) part_count
 {
 	(void) iterator;
 	(void) type;
 	(void) key;
-	(void) key_cardinality;
+	(void) part_count;
 	[self subclassResponsibility: _cmd];
 }
+
+- (void) checkKeyParts: (int) part_count :(bool) partial_key_allowed
+{
+	if (part_count > key_def->part_count)
+		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
+			  part_count, key_def->part_count);
+	if (!partial_key_allowed && part_count < key_def->part_count)
+		tnt_raise(ClientError, :ER_EXACT_MATCH,
+			  part_count, key_def->part_count);
+}
+
 @end
 
 /* }}} */
@@ -279,7 +302,7 @@ hash_iterator_free(struct iterator *iterator)
 	if (field == NULL)
 		tnt_raise(ClientError, :ER_NO_SUCH_FIELD,
 			  key_def->parts[0].fieldno);
-	return [self find :field :1];
+	return [self findUnsafe :field :1];
 }
 
 - (struct iterator *) allocIterator
@@ -292,6 +315,14 @@ hash_iterator_free(struct iterator *iterator)
 	}
 	return (struct iterator *) it;
 }
+
+- (void) checkKeyParts: (int) part_count :(bool) partial_key_allowed
+{
+	/* Hash indexes never allow partial keys. */
+	(void) partial_key_allowed;
+	[super checkKeyParts: part_count :false];
+}
+
 @end
 
 /* }}} */
@@ -299,20 +330,11 @@ hash_iterator_free(struct iterator *iterator)
 /* {{{ Hash32Index ************************************************/
 
 static u32
-int32_key_to_value(void *key, int key_cardinality)
+int32_key_to_value(void *key)
 {
-	if (key_cardinality > 1)
-		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
-			  key_cardinality, 1);
-
-	if (key_cardinality < 1)
-		tnt_raise(ClientError, :ER_EXACT_MATCH,
-			  key_cardinality, 1);
-
 	u32 key_size = load_varint32(&key);
 	if (key_size != 4)
 		tnt_raise(ClientError, :ER_KEY_FIELD_TYPE, "u32");
-
 	return *((u32 *) key);
 }
 
@@ -345,10 +367,12 @@ int32_key_to_value(void *key, int key_cardinality)
 	return mh_size(int_hash);
 }
 
-- (struct box_tuple *) find: (void *) key :(int) key_cardinality
+- (struct box_tuple *) findUnsafe: (void *) key :(int) part_count
 {
+	(void) part_count;
+
 	struct box_tuple *ret = NULL;
-	u32 num = int32_key_to_value(key, key_cardinality);
+	u32 num = int32_key_to_value(key);
 	mh_int_t k = mh_i32ptr_get(int_hash, num);
 	if (k != mh_end(int_hash))
 		ret = mh_value(int_hash, k);
@@ -361,7 +385,7 @@ int32_key_to_value(void *key, int key_cardinality)
 - (void) remove: (struct box_tuple *) tuple
 {
 	void *field = tuple_field(tuple, key_def->parts[0].fieldno);
-	u32 num = int32_key_to_value(field, 1);
+	u32 num = int32_key_to_value(field);
 	mh_int_t k = mh_i32ptr_get(int_hash, num);
 	if (k != mh_end(int_hash))
 		mh_i32ptr_del(int_hash, k);
@@ -374,7 +398,7 @@ int32_key_to_value(void *key, int key_cardinality)
 	:(struct box_tuple *) new_tuple
 {
 	void *field = tuple_field(new_tuple, key_def->parts[0].fieldno);
-	u32 num = int32_key_to_value(field, 1);
+	u32 num = int32_key_to_value(field);
 
 	if (old_tuple != NULL) {
 		void *old_field = tuple_field(old_tuple,
@@ -407,17 +431,17 @@ int32_key_to_value(void *key, int key_cardinality)
 	it->hash = int_hash;
 }
 
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-                        :(void *) key
-			:(int) key_cardinality
+- (void) initIteratorUnsafe: (struct iterator *) iterator :(enum iterator_type) type
+                        :(void *) key :(int) part_count
 {
-	assert(iterator->next == hash_iterator_next);
-	struct hash_iterator *it = hash_iterator(iterator);
-
+	(void) part_count;
 	if (type == ITER_REVERSE)
 		tnt_raise(IllegalParams, :"hash iterator is forward only");
 
-	u32 num = int32_key_to_value(key, key_cardinality);
+	assert(iterator->next == hash_iterator_next);
+	struct hash_iterator *it = hash_iterator(iterator);
+
+	u32 num = int32_key_to_value(key);
 	it->base.next_equal = iterator_first_equal;
 	it->h_pos = mh_i32ptr_get(int_hash, num);
 	it->hash = int_hash;
@@ -429,20 +453,11 @@ int32_key_to_value(void *key, int key_cardinality)
 /* {{{ Hash64Index ************************************************/
 
 static u64
-int64_key_to_value(void *key, int key_cardinality)
+int64_key_to_value(void *key)
 {
-	if (key_cardinality > 1)
-		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
-			  key_cardinality, 1);
-
-	if (key_cardinality < 1)
-		tnt_raise(ClientError, :ER_EXACT_MATCH,
-			  key_cardinality, 1);
-
 	u32 key_size = load_varint32(&key);
 	if (key_size != 8)
 		tnt_raise(ClientError, :ER_KEY_FIELD_TYPE, "u64");
-
 	return *((u64 *) key);
 }
 
@@ -473,10 +488,12 @@ int64_key_to_value(void *key, int key_cardinality)
 	return mh_size(int64_hash);
 }
 
-- (struct box_tuple *) find: (void *) key :(int) key_cardinality
+- (struct box_tuple *) findUnsafe: (void *) key :(int) part_count
 {
+	(void) part_count;
+
 	struct box_tuple *ret = NULL;
-	u64 num = int64_key_to_value(key, key_cardinality);
+	u64 num = int64_key_to_value(key);
 	mh_int_t k = mh_i64ptr_get(int64_hash, num);
 	if (k != mh_end(int64_hash))
 		ret = mh_value(int64_hash, k);
@@ -489,7 +506,7 @@ int64_key_to_value(void *key, int key_cardinality)
 - (void) remove: (struct box_tuple *) tuple
 {
 	void *field = tuple_field(tuple, key_def->parts[0].fieldno);
-	u64 num = int64_key_to_value(field, 1);
+	u64 num = int64_key_to_value(field);
 
 	mh_int_t k = mh_i64ptr_get(int64_hash, num);
 	if (k != mh_end(int64_hash))
@@ -503,7 +520,7 @@ int64_key_to_value(void *key, int key_cardinality)
 	:(struct box_tuple *) new_tuple
 {
 	void *field = tuple_field(new_tuple, key_def->parts[0].fieldno);
-	u64 num = int64_key_to_value(field, 1);
+	u64 num = int64_key_to_value(field);
 
 	if (old_tuple != NULL) {
 		void *old_field = tuple_field(old_tuple,
@@ -535,17 +552,17 @@ int64_key_to_value(void *key, int key_cardinality)
 	it->hash = (struct mh_i32ptr_t *) int64_hash;
 }
 
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-                        :(void *) key
-			:(int) key_cardinality
+- (void) initIteratorUnsafe: (struct iterator *) iterator :(enum iterator_type) type
+                        :(void *) key :(int) part_count
 {
-	assert(iterator->next == hash_iterator_next);
-	struct hash_iterator *it = hash_iterator(iterator);
-
+	(void) part_count;
 	if (type == ITER_REVERSE)
 		tnt_raise(IllegalParams, :"hash iterator is forward only");
 
-	u64 num = int64_key_to_value(key, key_cardinality);
+	assert(iterator->next == hash_iterator_next);
+	struct hash_iterator *it = hash_iterator(iterator);
+
+	u64 num = int64_key_to_value(key);
 
 	it->base.next_equal = iterator_first_equal;
 	it->h_pos = mh_i64ptr_get(int64_hash, num);
@@ -557,18 +574,6 @@ int64_key_to_value(void *key, int key_cardinality)
 
 /* {{{ HashStrIndex ***********************************************/
 
-static char *
-str_key_to_value(void *key, int key_cardinality)
-{
-	if (key_cardinality > 1)
-		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
-			  key_cardinality, 1);
-	if (key_cardinality < 1)
-		tnt_raise(ClientError, :ER_EXACT_MATCH,
-			  key_cardinality, 1);
-	return key;
-}
-
 @interface HashStrIndex: HashIndex {
 	 struct mh_lstrptr_t *str_hash;
 };
@@ -596,11 +601,11 @@ str_key_to_value(void *key, int key_cardinality)
 	return mh_size(str_hash);
 }
 
-- (struct box_tuple *) find: (void *) key :(int) key_cardinality
+- (struct box_tuple *) findUnsafe: (void *) key :(int) part_count
 {
+	(void) part_count;
 	struct box_tuple *ret = NULL;
-	void *lstr = str_key_to_value(key, key_cardinality);
-	mh_int_t k = mh_lstrptr_get(str_hash, lstr);
+	mh_int_t k = mh_lstrptr_get(str_hash, key);
 	if (k != mh_end(str_hash))
 		ret = mh_value(str_hash, k);
 #ifdef DEBUG
@@ -663,19 +668,19 @@ str_key_to_value(void *key, int key_cardinality)
 	it->hash = (struct mh_i32ptr_t *) str_hash;
 }
 
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-                        :(void *) key
-			:(int) key_cardinality
+- (void) initIteratorUnsafe: (struct iterator *) iterator
+			:(enum iterator_type) type
+                        :(void *) key :(int) part_count
 {
-	assert(iterator->next == hash_iterator_next);
-	struct hash_iterator *it = hash_iterator(iterator);
-
+	(void) part_count;
 	if (type == ITER_REVERSE)
 		tnt_raise(IllegalParams, :"hash iterator is forward only");
 
-	void *lstr = str_key_to_value(key, key_cardinality);
+	assert(iterator->next == hash_iterator_next);
+	struct hash_iterator *it = hash_iterator(iterator);
+
 	it->base.next_equal = iterator_first_equal;
-	it->h_pos = mh_lstrptr_get(str_hash, lstr);
+	it->h_pos = mh_lstrptr_get(str_hash, key);
 	it->hash = (struct mh_i32ptr_t *) str_hash;
 }
 @end
diff --git a/mod/box/memcached.m b/mod/box/memcached.m
index 9e2deb1c97ff67c7185f1e4be58ef5969dc6ef4e..3669d19eff5dd719eac7252901f343e78a253c3f 100644
--- a/mod/box/memcached.m
+++ b/mod/box/memcached.m
@@ -131,7 +131,7 @@ delete(void *key)
 static struct box_tuple *
 find(void *key)
 {
-	return [memcached_index find :key :1];
+	return [memcached_index findByKey :key :1];
 }
 
 static struct meta *
diff --git a/mod/box/tree.m b/mod/box/tree.m
index 76d589e72877330c7ef96bd1ecb5a4bc5a4e520e..d2c6d08ad1adb5e4f20ca71d7d1f6df012054cc5 100644
--- a/mod/box/tree.m
+++ b/mod/box/tree.m
@@ -864,22 +864,14 @@ tree_iterator_free(struct iterator *iterator)
 	return [self unfold: node];
 }
 
-- (struct box_tuple *) find: (void *) key : (int) key_cardinality
+- (struct box_tuple *) findUnsafe: (void *) key : (int) part_count
 {
 	struct key_data *key_data
 		= alloca(sizeof(struct key_data) +
-			 _SIZEOF_SPARSE_PARTS(key_cardinality));
-
-	if (key_cardinality > key_def->part_count)
-		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
-			  key_cardinality, key_def->part_count);
-
-	if (key_cardinality < key_def->part_count)
-		tnt_raise(ClientError, :ER_EXACT_MATCH,
-			  key_cardinality, key_def->part_count);
+			 _SIZEOF_SPARSE_PARTS(part_count));
 
 	key_data->data = key;
-	key_data->part_count = key_cardinality;
+	key_data->part_count = part_count;
 	fold_with_key_parts(key_def, key_data);
 
 	void *node = sptree_index_find(&tree, key_data);
@@ -938,22 +930,17 @@ tree_iterator_free(struct iterator *iterator)
 
 - (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
 {
-	[self initIterator: iterator :type :NULL :0];
+	[self initIteratorUnsafe: iterator :type :NULL :0];
 }
 
-- (void) initIterator: (struct iterator *) iterator :(enum iterator_type) type
-                        :(void *) key
-			:(int) key_cardinality
+- (void) initIteratorUnsafe: (struct iterator *) iterator :(enum iterator_type) type
+                        :(void *) key :(int) part_count
 {
 	assert(iterator->free == tree_iterator_free);
 	struct tree_iterator *it = tree_iterator(iterator);
 
-	if (key_cardinality > key_def->part_count)
-		tnt_raise(ClientError, :ER_KEY_CARDINALITY,
-			  key_cardinality, key_def->part_count);
-
 	it->key_data.data = key;
-	it->key_data.part_count = key_cardinality;
+	it->key_data.part_count = part_count;
 	fold_with_key_parts(key_def, &it->key_data);
 
 	if (type == ITER_FORWARD) {
diff --git a/test/box/protocol.c b/test/box/protocol.c
index 58b14abe9f96a65ede41b933e4f1e1d5f43d5aca..c22bbfdab1b1444720997d0ecd2d1cdf08bd1078 100644
--- a/test/box/protocol.c
+++ b/test/box/protocol.c
@@ -6,9 +6,9 @@
 #include "util.h"
 #include "errcode.h"
 
-#include <libtnt/tnt.h>
-#include <libtnt/tnt_net.h>
-#include <libtnt/tnt_io.h>
+#include <tarantool/tnt.h>
+#include <tarantool/tnt_net.h>
+#include <tarantool/tnt_io.h>
 
 /** Client handler. Reused between tests. */
 struct tnt_stream *t;
diff --git a/test/connector_c/tt.c b/test/connector_c/tt.c
index 2204e06c4bca8cb8daa4bea21b98c458d5aab85a..4233361bfd8dcd4b6ddfc7fc11393ce3e04b3dad 100644
--- a/test/connector_c/tt.c
+++ b/test/connector_c/tt.c
@@ -30,13 +30,13 @@
 #include <stdio.h>
 #include <string.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_net.h>
-#include <connector/c/include/libtnt/tnt_io.h>
-#include <connector/c/include/libtnt/tnt_queue.h>
-#include <connector/c/include/libtnt/tnt_utf8.h>
-#include <connector/c/include/libtnt/tnt_lex.h>
-#include <connector/c/include/libtnt/tnt_sql.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_net.h>
+#include <connector/c/include/tarantool/tnt_io.h>
+#include <connector/c/include/tarantool/tnt_queue.h>
+#include <connector/c/include/tarantool/tnt_utf8.h>
+#include <connector/c/include/tarantool/tnt_lex.h>
+#include <connector/c/include/tarantool/tnt_sql.h>
 
 struct tt_test;
 
diff --git a/test/connector_c/update.c b/test/connector_c/update.c
index c07db58b5a86897cad038b773e789fbf9c3a5e42..cbeaa002566fea20dcdb8727360b7e06dc8c9d72 100644
--- a/test/connector_c/update.c
+++ b/test/connector_c/update.c
@@ -30,9 +30,9 @@
 #include <string.h>
 #include <limits.h>
 
-#include <connector/c/include/libtnt/tnt.h>
-#include <connector/c/include/libtnt/tnt_net.h>
-#include <connector/c/include/libtnt/tnt_io.h>
+#include <connector/c/include/tarantool/tnt.h>
+#include <connector/c/include/tarantool/tnt_net.h>
+#include <connector/c/include/tarantool/tnt_io.h>
 
 #include <util.h>
 #include <errcode.h>