diff --git a/test/auto-pts/CMakeLists.txt b/test/auto-pts/CMakeLists.txt
index b86001867..68166f144 100644
--- a/test/auto-pts/CMakeLists.txt
+++ b/test/auto-pts/CMakeLists.txt
@@ -11,12 +11,12 @@ link_libraries( usb-1.0 )
 
 # add all directories
 include_directories(../../3rd-party/micro-ecc)
-include_directories(../../3rd-party/bluedroid/decoder/include)
-include_directories(../../3rd-party/bluedroid/encoder/include)
-include_directories(../../3rd-party/md5)
-include_directories(../../3rd-party/hxcmod-player)
-include_directories(../../3rd-party/hxcmod-player/mod)
-include_directories(../../3rd-party/yxml)
+# include_directories(../../3rd-party/bluedroid/decoder/include)
+# include_directories(../../3rd-party/bluedroid/encoder/include)
+# include_directories(../../3rd-party/md5)
+# include_directories(../../3rd-party/hxcmod-player)
+# include_directories(../../3rd-party/hxcmod-player/mod)
+# include_directories(../../3rd-party/yxml)
 include_directories(../../3rd-party/tinydir)
 include_directories(../../chipset/zephyr)
 include_directories(../../src)
@@ -31,14 +31,14 @@ include_directories(..)
 file(GLOB SOURCES_SRC       "../../src/*.c" "../../example/sco_demo_util.c")
 file(GLOB SOURCES_BLE       "../../src/ble/*.c")
 file(GLOB SOURCES_GATT      "../../src/ble/gatt-service/*.c")
-file(GLOB SOURCES_CLASSIC   "../../src/classic/*.c")
-file(GLOB SOURCES_BLUEDROID "../../3rd-party/bluedroid/encoder/srce/*.c" "../../3rd-party/bluedroid/decoder/srce/*.c")
-file(GLOB SOURCES_MD5       "../../3rd-party/md5/md5.c")
-file(GLOB SOURCES_UECC      "../../3rd-party/micro-ecc/uECC.c")
-file(GLOB SOURCES_YXML      "../../3rd-party/yxml/yxml.c")
-file(GLOB SOURCES_HXCMOD    "../../3rd-party/hxcmod-player/*.c"  "../../3rd-party/hxcmod-player/mods/*.c")
+# file(GLOB SOURCES_CLASSIC   "../../src/classic/*.c")
+# file(GLOB SOURCES_BLUEDROID "../../3rd-party/bluedroid/encoder/srce/*.c" "../../3rd-party/bluedroid/decoder/srce/*.c")
+# file(GLOB SOURCES_MD5       "../../3rd-party/md5/md5.c")
+# file(GLOB SOURCES_UECC      "../../3rd-party/micro-ecc/uECC.c")
+# file(GLOB SOURCES_YXML      "../../3rd-party/yxml/yxml.c")
+# file(GLOB SOURCES_HXCMOD    "../../3rd-party/hxcmod-player/*.c"  "../../3rd-party/hxcmod-player/mods/*.c")
 file(GLOB SOURCES_POSIX     "../../platform/posix/*.c")
-file(GLOB SOURCES_LIBUSB    "../../port/libusb/*.c" "../../platform/libusb/*.c")
+file(GLOB SOURCES_LIBUSB    "../../platform/libusb/*.c")
 file(GLOB SOURCES_ZEPHYR    "../../chipset/zephyr/*.c")
 
 # remove some
@@ -48,17 +48,17 @@ file(GLOB SOURCES_POSIX_OFF "../../platform/posix/le_device_db_fs.c")
 list(REMOVE_ITEM SOURCES_POSIX ${SOURCES_POSIX_OFF})
 
 set(SOURCES 
-	${SOURCES_MD5}
-	${SOURCES_YXML}
-	${SOURCES_BLUEDROID}
+#	${SOURCES_MD5}
+#	${SOURCES_YXML}
+#	${SOURCES_BLUEDROID}
 	${SOURCES_POSIX}
 	${SOURCES_LIBUSB}
 	${SOURCES_SRC}
 	${SOURCES_BLE}
 	${SOURCES_GATT}
-	${SOURCES_CLASSIC} 
+#	${SOURCES_CLASSIC}
 	${SOURCES_UECC}
-	${SOURCES_HXCMOD}
+#	${SOURCES_HXCMOD}
 	${SOURCES_ZEPHYR}
 )
 
@@ -73,7 +73,7 @@ add_library(btstack STATIC ${SOURCES})
 set (EXAMPLE btpclient)
 
 # create targets
-set (SOURCE_FILES ${EXAMPLE}.c btp_socket.c)
+set (SOURCE_FILES ${EXAMPLE}.c main.c btp_socket.c)
 
 add_executable(${EXAMPLE} ${SOURCE_FILES} )
 target_link_libraries(${EXAMPLE} btstack)
diff --git a/test/auto-pts/btpclient.c b/test/auto-pts/btpclient.c
index 784b332a3..c228cd9cb 100644
--- a/test/auto-pts/btpclient.c
+++ b/test/auto-pts/btpclient.c
@@ -245,7 +245,9 @@ static void btstack_packet_handler (uint8_t packet_type, uint16_t channel, uint8
                             if (gap_delete_bonding){
                                 MESSAGE("Delete all bonding information");
                                 gap_delete_bonding = false;
+#ifdef ENABLE_CLASSIC
                                 gap_delete_all_link_keys();
+#endif
                                 le_device_delete_all();
                             }
 
@@ -809,9 +811,9 @@ static void btp_gap_handler(uint8_t opcode, uint8_t controller_index, uint16_t l
             MESSAGE("BTP_GAP_OP_SET_DISCOVERABLE");
             if (controller_index == 0){
                 uint8_t discoverable = data[0];
-                // Classic
+#ifdef ENABLE_CLASSIC                // Classic
                 gap_discoverable_control(discoverable > 0);
-
+#endif
                 switch (discoverable) {
                     case BTP_GAP_DISCOVERABLE_NON:
                         ad_flags &= ~(BT_LE_AD_GENERAL | BT_LE_AD_LIMITED);
@@ -992,7 +994,9 @@ static void btp_gap_handler(uint8_t opcode, uint8_t controller_index, uint16_t l
                 }
                 if (flags & BTP_GAP_DISCOVERY_FLAG_BREDR){
                     gap_inquriy_scan_active = 1;
+#ifdef ENABLE_CLASSIC
                     gap_inquiry_start(15);
+#endif
                 }
                 btp_send(BTP_SERVICE_ID_GAP, opcode, controller_index, 0, NULL);
             }
@@ -1003,7 +1007,9 @@ static void btp_gap_handler(uint8_t opcode, uint8_t controller_index, uint16_t l
                 gap_stop_scan();
                 if (gap_inquriy_scan_active){
                     gap_inquriy_scan_active = 0;
+#ifdef ENABLE_CLASSIC
                     gap_inquiry_stop();
+#endif
                 }
                 btp_send(BTP_SERVICE_ID_GAP, opcode, controller_index, 0, NULL);
             }
@@ -1040,7 +1046,9 @@ static void btp_gap_handler(uint8_t opcode, uint8_t controller_index, uint16_t l
             MESSAGE("BTP_GAP_OP_SET_IO_CAPA");
             if (controller_index == 0){
                 uint8_t io_capabilities = data[0];
+#ifdef ENABLE_CLASSIC
                 gap_ssp_set_io_capability(io_capabilities);
+#endif
                 sm_set_io_capabilities( (io_capability_t) io_capabilities);
                 btp_send(BTP_SERVICE_ID_GAP, opcode, controller_index, 0, NULL);
             }
@@ -1059,7 +1067,9 @@ static void btp_gap_handler(uint8_t opcode, uint8_t controller_index, uint16_t l
                 // uint8_t   command_addr_type = data[0];
                 bd_addr_t command_addr;
                 reverse_bd_addr(&data[1], command_addr);
+#ifdef ENABLE_CLASSIC
                 gap_drop_link_key_for_bd_addr(command_addr);
+#endif
                 le_device_delete_all();
                 btp_send(BTP_SERVICE_ID_GAP, opcode, controller_index, 0, NULL);
             }
@@ -1864,8 +1874,10 @@ int btstack_main(int argc, const char * argv[])
     (void)argv;
 
     l2cap_init();
+#ifdef ENABLE_CLASSIC
     rfcomm_init();
     sdp_init();
+#endif
 
     le_device_db_init();
     sm_init();
@@ -1885,7 +1897,9 @@ int btstack_main(int argc, const char * argv[])
     sm_add_event_handler(&sm_event_callback_registration);
 
     // configure GAP
+#ifdef ENABLE_CLASSIC
     gap_ssp_set_io_capability(SSP_IO_CAPABILITY_DISPLAY_YES_NO);
+#endif
 
     strcpy(gap_name, "iut 00:00:00:00:00:00");
     gap_set_local_name(gap_name);
@@ -1893,8 +1907,9 @@ int btstack_main(int argc, const char * argv[])
     strcpy(gap_short_name, "iut");
 
     gap_cod = 0x007a020c;   // smartphone
+#ifdef ENABLE_CLASSIC
     gap_set_class_of_device(gap_cod);
-
+#endif
     // delete all bonding information on start
     gap_delete_bonding = true;
 
diff --git a/test/auto-pts/btstack_config.h b/test/auto-pts/btstack_config.h
index 300ec4236..2b8d133db 100644
--- a/test/auto-pts/btstack_config.h
+++ b/test/auto-pts/btstack_config.h
@@ -7,6 +7,7 @@
 
 // Port related features
 #define HAVE_MALLOC
+#define HAVE_ASSERT
 #define HAVE_POSIX_TIME
 #define HAVE_POSIX_FILE_IO
 #define HAVE_BTSTACK_STDIN
@@ -15,19 +16,14 @@
 
 // BTstack features that can be enabled
 #define ENABLE_BLE
-#define ENABLE_CLASSIC
 // #define ENABLE_LOG_DEBUG
-// #define ENABLE_GATT_CLIENT_PAIRING
+#define ENABLE_GATT_CLIENT_PAIRING
 #define ENABLE_LOG_ERROR
 #define ENABLE_LOG_INFO 
-#define ENABLE_SDP_DES_DUMP
-#define ENABLE_SDP_EXTRA_QUERIES
-// #define ENABLE_LE_SECURE_CONNECTIONS
+#define ENABLE_LE_SECURE_CONNECTIONS
 #define ENABLE_LE_SIGNED_WRITE
 #define ENABLE_LE_PERIPHERAL
 #define ENABLE_LE_CENTRAL
-#define ENABLE_SDP_EXTRA_QUERIES
-#define ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE
 #define ENABLE_BTP
 
 // BTstack configuration. buffers, sizes, ...
diff --git a/test/auto-pts/main.c b/test/auto-pts/main.c
new file mode 100644
index 000000000..237faaf5c
--- /dev/null
+++ b/test/auto-pts/main.c
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2014 BlueKitchen GmbH
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the copyright holders nor the names of
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ * 4. Any redistribution, use, or modification is done solely for
+ *    personal benefit and not for any commercial purpose or for
+ *    monetary gain.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
+ * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * Please inquire about commercial licensing options at 
+ * contact@bluekitchen-gmbh.com
+ *
+ */
+
+#define __BTSTACK_FILE__ "main.c"
+
+// *****************************************************************************
+//
+// minimal setup for HCI code
+//
+// *****************************************************************************
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+#include "btstack_config.h"
+
+#include "bluetooth_company_id.h"
+#include "btstack_debug.h"
+#include "btstack_event.h"
+#include "ble/le_device_db_tlv.h"
+#include "classic/btstack_link_key_db_tlv.h"
+#include "btstack_memory.h"
+#include "btstack_run_loop.h"
+#include "btstack_run_loop_posix.h"
+#include "hal_led.h"
+#include "hci.h"
+#include "hci_dump.h"
+#include "btstack_stdin.h"
+#include "btstack_audio.h"
+#include "btstack_tlv_posix.h"
+#include "btstack_chipset_zephyr.h"
+
+#define TLV_DB_PATH_PREFIX "/tmp/btstack_"
+#define TLV_DB_PATH_POSTFIX ".tlv"
+static char tlv_db_path[100];
+static const btstack_tlv_t * tlv_impl;
+static btstack_tlv_posix_t   tlv_context;
+static bd_addr_t             local_addr;
+
+int btstack_main(int argc, const char * argv[]);
+
+static const uint8_t read_static_address_command_complete_prefix[] = { 0x0e, 0x1b, 0x01, 0x09, 0xfc };
+
+static bd_addr_t static_address;
+static int using_static_address;
+
+static btstack_packet_callback_registration_t hci_event_callback_registration;
+
+static void local_version_information_handler(uint8_t * packet){
+    printf("Local version information:\n");
+    uint16_t hci_version    = packet[6];
+    uint16_t hci_revision   = little_endian_read_16(packet, 7);
+    uint16_t lmp_version    = packet[9];
+    uint16_t manufacturer   = little_endian_read_16(packet, 10);
+    uint16_t lmp_subversion = little_endian_read_16(packet, 12);
+    printf("- HCI Version    0x%04x\n", hci_version);
+    printf("- HCI Revision   0x%04x\n", hci_revision);
+    printf("- LMP Version    0x%04x\n", lmp_version);
+    printf("- LMP Subversion 0x%04x\n", lmp_subversion);
+    printf("- Manufacturer 0x%04x\n", manufacturer);
+    switch (manufacturer){
+        case BLUETOOTH_COMPANY_ID_THE_LINUX_FOUNDATION:
+            printf("Linux Foundation - assume Zephyr hci_usb example running on nRF52xx\n");
+            hci_set_chipset(btstack_chipset_zephyr_instance());
+            break;
+        default:
+            break;
+    }
+}
+
+static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
+    UNUSED(channel);
+    UNUSED(size);
+    if (packet_type != HCI_EVENT_PACKET) return;
+    switch (hci_event_packet_get_type(packet)){
+        case BTSTACK_EVENT_STATE:
+            switch (btstack_event_state_get_state(packet)){
+                case HCI_STATE_WORKING:
+                    gap_local_bd_addr(local_addr);
+                    if (using_static_address){
+                        memcpy(local_addr, static_address, 6);
+                    }
+                    printf("BTstack up and running on %s.\n", bd_addr_to_str(local_addr));
+                    strcpy(tlv_db_path, TLV_DB_PATH_PREFIX);
+                    strcat(tlv_db_path, bd_addr_to_str(local_addr));
+                    strcat(tlv_db_path, TLV_DB_PATH_POSTFIX);
+                    tlv_impl = btstack_tlv_posix_init_instance(&tlv_context, tlv_db_path);
+                    btstack_tlv_set_instance(tlv_impl, &tlv_context);
+#ifdef ENABLE_CLASSIC
+                    hci_set_link_key_db(btstack_link_key_db_tlv_get_instance(tlv_impl, &tlv_context));
+#endif
+#ifdef ENABLE_BLE
+                    le_device_db_tlv_configure(tlv_impl, &tlv_context);
+#endif
+                    break;
+                case HCI_STATE_OFF:
+                    btstack_tlv_posix_deinit(&tlv_context);
+                    break;
+                default:
+                    break;
+            }
+            if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return;
+            break;
+        case HCI_EVENT_COMMAND_COMPLETE:
+            if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_local_version_information)){
+                local_version_information_handler(packet);
+            }
+            if (memcmp(packet, read_static_address_command_complete_prefix, sizeof(read_static_address_command_complete_prefix)) == 0){
+                reverse_48(&packet[7], static_address);
+                gap_random_address_set(static_address);
+                using_static_address = 1;
+            }
+            break;
+        default:
+            break;
+    }
+}
+
+static void sigint_handler(int param){
+    UNUSED(param);
+
+    printf("CTRL-C - SIGINT received, shutting down..\n");   
+    log_info("sigint_handler: shutting down");
+
+    // reset anyway
+    btstack_stdin_reset();
+
+    // power down
+    hci_power_control(HCI_POWER_OFF);
+    hci_close();
+    log_info("Good bye, see you.\n");    
+    exit(0);
+}
+
+static int led_state = 0;
+void hal_led_toggle(void){
+    led_state = 1 - led_state;
+    printf("LED State %u\n", led_state);
+}
+
+#define USB_MAX_PATH_LEN 7
+int main(int argc, const char * argv[]){
+
+    uint8_t usb_path[USB_MAX_PATH_LEN];
+    int usb_path_len = 0;
+    const char * usb_path_string = NULL;
+    if (argc >= 3 && strcmp(argv[1], "-u") == 0){
+        // parse command line options for "-u 11:22:33"
+        usb_path_string = argv[2];
+        printf("Specified USB Path: ");
+        while (1){
+            char * delimiter;
+            int port = strtol(usb_path_string, &delimiter, 16);
+            usb_path[usb_path_len] = port;
+            usb_path_len++;
+            printf("%02x ", port);
+            if (!delimiter) break;
+            if (*delimiter != ':' && *delimiter != '-') break;
+            usb_path_string = delimiter+1;
+        }
+        printf("\n");
+        argc -= 2;
+        memmove(&argv[1], &argv[3], (argc-1) * sizeof(char *));
+    }
+
+	/// GET STARTED with BTstack ///
+	btstack_memory_init();
+    btstack_run_loop_init(btstack_run_loop_posix_get_instance());
+	    
+    if (usb_path_len){
+        hci_transport_usb_set_path(usb_path_len, usb_path);
+    }
+
+    // use logger: format HCI_DUMP_PACKETLOGGER, HCI_DUMP_BLUEZ or HCI_DUMP_STDOUT
+
+    char pklg_path[100];
+    strcpy(pklg_path, "/tmp/hci_dump");
+    if (usb_path_len){
+        strcat(pklg_path, "_");
+        strcat(pklg_path, usb_path_string);
+    }
+    strcat(pklg_path, ".pklg");
+    printf("Packet Log: %s\n", pklg_path);
+    hci_dump_open(pklg_path, HCI_DUMP_PACKETLOGGER);
+
+    // init HCI
+	hci_init(hci_transport_usb_instance(), NULL);
+
+#ifdef HAVE_PORTAUDIO
+    btstack_audio_sink_set_instance(btstack_audio_portaudio_sink_get_instance());
+    btstack_audio_source_set_instance(btstack_audio_portaudio_source_get_instance());
+#endif
+
+    // inform about BTstack state
+    hci_event_callback_registration.callback = &packet_handler;
+    hci_add_event_handler(&hci_event_callback_registration);
+
+    // handle CTRL-c
+    signal(SIGINT, sigint_handler);
+
+    // setup app
+    btstack_main(argc, argv);
+
+    // go
+    btstack_run_loop_execute();    
+
+    return 0;
+}