diff --git a/src/com/android/nfc/NativeNfcTag.java b/src/com/android/nfc/NativeNfcTag.java
index ae1bc18..5fffe7d 100755
--- a/src/com/android/nfc/NativeNfcTag.java
+++ b/src/com/android/nfc/NativeNfcTag.java
@@ -153,7 +153,7 @@
             for (int i = 0; i < mTechList.length; i++) {
                 Bundle extras = new Bundle();
                 switch (mTechList[i]) {
-                    case TagTechnology.ISO_14443_3A: {
+                    case TagTechnology.NFC_A: {
                         byte[] actBytes = mActivationBytes;
                         if ((actBytes != null) && (actBytes.length > 0)) {
                             extras.putShort(NfcA.EXTRA_SAK, (short) (actBytes[0] & (short) 0xFF));
@@ -164,7 +164,7 @@
                         break;
                     }
 
-                    case TagTechnology.ISO_14443_3B: {
+                    case TagTechnology.NFC_B: {
                         extras.putByteArray(NfcB.EXTRA_ATQB, mPollBytes);
                         break;
                     }
diff --git a/src/com/android/nfc/mytag/MyTagClient.java b/src/com/android/nfc/mytag/MyTagClient.java
index 241d9e2..d515f88 100755
--- a/src/com/android/nfc/mytag/MyTagClient.java
+++ b/src/com/android/nfc/mytag/MyTagClient.java
@@ -45,21 +45,19 @@
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        if (DBG) Log.d(TAG, "LLCP connection up and running");
-        NfcAdapter adapter = NfcAdapter.getDefaultAdapter();
-        NdefMessage msg = adapter.getLocalNdefMessage();
-        
-        if (msg == null) {
-            if (DBG) Log.d(TAG, "No MyTag set, exiting");
-            // Nothing to send to the server
+        int linkState = intent.getIntExtra(NfcAdapter.EXTRA_LLCP_LINK_STATE_CHANGED,
+                NfcAdapter.LLCP_LINK_STATE_DEACTIVATED);
+        if (linkState != NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
+            // The link was torn down, ignore
             return;
         }
 
-        int linkState = intent.getIntExtra(NfcAdapter.EXTRA_LLCP_LINK_STATE_CHANGED,
-                    NfcAdapter.LLCP_LINK_STATE_DEACTIVATED);
-
-        if (linkState != NfcAdapter.LLCP_LINK_STATE_ACTIVATED) {
-            if (DBG) Log.d(TAG, "LLCP connection not activated, exiting");
+        if (DBG) Log.d(TAG, "LLCP connection up and running");
+        NfcAdapter adapter = NfcAdapter.getDefaultAdapter();
+        NdefMessage msg = adapter.getLocalNdefMessage();
+        if (msg == null) {
+            if (DBG) Log.d(TAG, "No MyTag set, exiting");
+            // Nothing to send to the server
             return;
         }
 
diff --git a/src/com/android/nfc/mytag/MyTagServer.java b/src/com/android/nfc/mytag/MyTagServer.java
index 8dcc6ca..68a895a 100755
--- a/src/com/android/nfc/mytag/MyTagServer.java
+++ b/src/com/android/nfc/mytag/MyTagServer.java
@@ -49,6 +49,7 @@
         private LlcpSocket mSock;
 
         ConnectionThread(LlcpSocket sock) {
+            super("MyTagServer");
             mSock = sock;
         }
 
@@ -75,7 +76,7 @@
                     } catch (IOException e) {
                         // Connection broken
                         connectionBroken = true;
-                        if (DBG) Log.d(TAG, "connection broken");
+                        if (DBG) Log.d(TAG, "connection broken by IOException", e);
                     }
                 }
 
