diff --git a/extend.c b/extend.c
index a7b9df1..892f1bc 100644
--- a/extend.c
+++ b/extend.c
@@ -90,41 +90,14 @@ int mode_add_get(struct sockaddr_ina *dst, int m)
 }
 
 
-int ext_connect(struct poolhd *pool, struct eval *val, 
-        struct sockaddr_ina *dst, int next, int m)
-{
-    assert(m >= 0 && m < params.dp_count && dst && val);
-    
-    struct desync_params *dp = &params.dp[m];
-    if (dp->to_ip) {
-        struct sockaddr_ina addr = { .in6 = dp->addr };
-        if (!addr.in.sin_port) {
-            addr.in.sin_port = dst->in.sin_port;
-        }
-        return create_conn(pool, val, &addr, next);
-    }
-    return create_conn(pool, val, dst, next);
-}
-
-
 int connect_hook(struct poolhd *pool, struct eval *val, 
         struct sockaddr_ina *dst, int next)
 {
     int m = mode_add_get(dst, -1);
     val->cache = (m == 0);
-    m = m < 0 ? 0 : m;
-    val->attempt = m;
+    val->attempt = m < 0 ? 0 : m;
     
-    if (params.late_conn) {
-        val->type = EV_DESYNC;
-        if (resp_error(val->fd, 0, val->flag) < 0) {
-            perror("send");
-            return -1;
-         }
-         val->in6 = dst->in6;
-         return 0;
-    }
-    return ext_connect(pool, val, dst, next, m);
+    return create_conn(pool, val, dst, next);
 }
 
 
@@ -132,8 +105,8 @@ int reconnect(struct poolhd *pool, struct eval *val, int m)
 {
     struct eval *client = val->pair;
     
-    if (ext_connect(pool, client, 
-            (struct sockaddr_ina *)&val->in6, EV_DESYNC, m)) {
+    if (create_conn(pool, client, 
+            (struct sockaddr_ina *)&val->in6, EV_DESYNC)) {
         return -1;
     }
     val->pair = 0;
@@ -179,11 +152,10 @@ int on_torst(struct poolhd *pool, struct eval *val)
     
     for (; m < params.dp_count; m++) {
         struct desync_params *dp = &params.dp[m];
-        if (!(dp->detect & DETECT_TORST)) {
-            continue;
+        if (!dp->detect) {
+            return -1;
         }
-        if ((!dp->hosts || check_host(dp->hosts, val->pair)) &&
-                (!dp->proto || check_proto_tcp(dp->proto, val))) {
+        if (dp->detect & DETECT_TORST) {
             break;
         }
     }
@@ -206,33 +178,27 @@ int on_response(struct poolhd *pool, struct eval *val,
     
     for (; m < params.dp_count; m++) {
         struct desync_params *dp = &params.dp[m];
-        
-        switch (0) {
-        default:
-            if ((dp->detect & DETECT_HTTP_LOCAT)
-                    && is_http_redirect(req, qn, resp, sn)) {
-                break;
-            }
-            else if ((dp->detect & DETECT_TLS_INVSID)
-                    && neq_tls_sid(req, qn, resp, sn)) {
-                break;
-            }
-            else if ((dp->detect & DETECT_TLS_ALERT)
-                    && is_tls_alert(resp, sn)) {
-                break;
-            }
-            else if (dp->detect & DETECT_HTTP_CLERR) {
-                int code = get_http_code(resp, sn);
-                if (code > 400 && code < 451 && code != 429) {
-                    break;
-                }
-            }
-            continue;
+        if (!dp->detect) {
+            return -1;
         }
-        if ((!dp->hosts || check_host(dp->hosts, val->pair)) &&
-                (!dp->proto || check_proto_tcp(dp->proto, val))) {
+        if ((dp->detect & DETECT_HTTP_LOCAT)
+                && is_http_redirect(req, qn, resp, sn)) {
             break;
         }
+        else if ((dp->detect & DETECT_TLS_INVSID)
+                && neq_tls_sid(req, qn, resp, sn)) {
+            break;
+        }
+        else if ((dp->detect & DETECT_TLS_ALERT)
+                && is_tls_alert(resp, sn)) {
+            break;
+        }
+        else if (dp->detect & DETECT_HTTP_CLERR) {
+            int code = get_http_code(resp, sn);
+            if (code > 400 && code < 451 && code != 429) {
+                break;
+            }
+        }
     }
     if (m < params.dp_count) {
         return reconnect(pool, val, m);
@@ -382,10 +348,6 @@ int on_desync(struct poolhd *pool, struct eval *val,
     }
     val->attempt = m;
     
-    if (params.late_conn && val->recv_count == n) {
-        return ext_connect(pool, val, 
-            (struct sockaddr_ina *)&val->in6, EV_DESYNC, m);
-    }
     return on_desync_again(pool, val, buffer, bfsize);
 }
 
diff --git a/main.c b/main.c
index 5b16748..5881a6d 100644
--- a/main.c
+++ b/main.c
@@ -74,7 +74,6 @@ const char help_text[] = {
     #ifdef TCP_FASTOPEN_CONNECT
     "    -F, --tfo                 Enable TCP Fast Open\n"
     #endif
-    "    -L, --late-conn           Waiting for request before connecting\n"
     "    -A, --auto[=t,r,c,s,a,n]  Try desync params after this option\n"
     "                              Detect: torst,redirect,cl_err,sid_inv,alert,none\n"
     "    -u, --cache-ttl <sec>     Lifetime of cached desync params for IP\n"
@@ -83,7 +82,6 @@ const char help_text[] = {
     #endif
     "    -K, --proto[=t,h]         Protocol whitelist: tls,http\n"
     "    -H, --hosts <file|:str>   Hosts whitelist\n"
-    "    -D, --dst <ip[:port]>     Custom destination IP\n"
     "    -s, --split <n[+s]>       Split packet at n\n"
     "                              +s - add SNI offset\n"
     "                              +h - add HTTP Host offset\n"
@@ -121,7 +119,6 @@ const struct option options[] = {
     #ifdef TCP_FASTOPEN_CONNECT
     {"tfo ",          0, 0, 'F'},
     #endif
-    {"late-conn",     0, 0, 'L'},
     {"auto",          2, 0, 'A'},
     {"cache-ttl",     1, 0, 'u'},
     #ifdef TIMEOUT_SUPPORT
@@ -129,7 +126,6 @@ const struct option options[] = {
     #endif
     {"proto",         2, 0, 'K'},
     {"hosts",         1, 0, 'H'},
-    {"dst",           1, 0, 'D'},
     {"split",         1, 0, 's'},
     {"disorder",      1, 0, 'd'},
     {"oob",           1, 0, 'o'},
@@ -536,10 +532,6 @@ int main(int argc, char **argv)
             
         // desync options
         
-        case 'L':
-            params.late_conn = 1;
-            break;
-            
         case 'F':
             params.tfo = 1;
             break;
@@ -646,13 +638,6 @@ int main(int argc, char **argv)
             }
             break;
             
-        case 'D':
-            if (get_addr_with_port(optarg, (struct sockaddr_ina *)&dp->addr) < 0)
-                invalid = 1;
-            else
-                dp->to_ip = 1;
-            break;
-            
         case 's':
         case 'd':
         case 'o':
diff --git a/packets.c b/packets.c
index 188fbdf..8c04977 100644
--- a/packets.c
+++ b/packets.c
@@ -346,8 +346,9 @@ bool neq_tls_sid(char *req, size_t qn, char *resp, size_t sn)
 
 
 bool is_tls_alert(char *resp, size_t sn) {
-    return (sn >= 7 
-        && !memcmp(resp, "\x15\x03\x01\x00\x02\x02", 6));
+    return (sn >= 7
+        && resp[0] == 0x15 && resp[1] == 0x03
+        && !memcmp(resp + 3, "\x00\x02\x02", 3));
 }
 
 /*
diff --git a/params.h b/params.h
index 0c664f3..3f62dad 100644
--- a/params.h
+++ b/params.h
@@ -70,9 +70,6 @@ struct desync_params {
     
     char *file_ptr;
     ssize_t file_size;
-    
-    char to_ip;
-    struct sockaddr_in6 addr;
 };
 
 struct params {
@@ -83,7 +80,6 @@ struct params {
     int def_ttl;
     char custom_ttl;
     
-    char late_conn;
     char tfo;
     unsigned int timeout;
     long cache_ttl;
diff --git a/readme.txt b/readme.txt
index 6b93b40..3801cc0 100644
--- a/readme.txt
+++ b/readme.txt
@@ -39,10 +39,6 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
     Если сервер его поддерживает, то первый пакет будет отправлен сразу вместе с SYN
     Поддерживается только в Linux (4.11+)
     
--L, --late-conn
-    Выполнять настоящее подключение только после получения первого пакета от клиента
-    Полезно при сочетании --hosts с --dst
-    
 -A, --auto[=t,r,c,s,a,n]
     Автоматический режим
     Если произошло событие, похожее на блокировку или поломку,
@@ -77,10 +73,6 @@ $ ./ciadpi --disorder 3 -A --tlsrec 1+s
     Ограничить область действия параметров списком доменов
     Домены должны быть разделены новой строкой или пробелом
     
--D, --dst <ip>
-    Заменить адрес назначения из запроса на указанный
-    Полезно совмещать с --auto и --hosts
-    
 -s, --split <n[+s]>
     Разбить запрос по указанному смещению
     После числа можно добавить флаг:
@@ -241,10 +233,6 @@ TCP может отсылать данные вне основного пото
 --hosts list.txt --auto=none --disorder 3
 Не применять запутывание для доменов из list.txt
 
---late-conn --hosts ':one.one.one.one' --dst 1.1.1.1 --disorder 3 --auto=none --auto=torst --timeout 3 --tlsrec 1+s
-Для указанного домена применять disorder, подключаясь только на указанный IP и игнорируя адрес из запроса.
-Для остальных ничего не делать, однако если обнаружится блокировка, то попробовать применить tlsrec.
-
 --auto=torst --hosts list.txt --disorder 3
 По умолчанию ничего не делать, использовать disorder при условии, что произошла блокировка и домен входит в list.txt.