diff --git a/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java b/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
index 9fc2d53..7ae8762 100644
--- a/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
+++ b/fmapp2/src/com/caf/fmradio/FMTransmitterActivity.java
@@ -236,17 +236,13 @@
        }
 
        enableRadioOnOffUI(false);
-       //HDMI and FM concurrecny is not supported.
-       if(isHdmiOn()) {
-          showDialog(DIALOG_CMD_FAILED_HDMI_ON);
+
+       if(false == bindToService(this, osc)) {
+          Log.d(LOGTAG, "onCreate: Failed to Start Service");
        }else {
-          if(false == bindToService(this, osc)) {
-             Log.d(LOGTAG, "onCreate: Failed to Start Service");
-          }else {
-             Log.d(LOGTAG, "onCreate: Start Service completed successfully");
-          }
-          registerFMSettingListner();
+          Log.d(LOGTAG, "onCreate: Start Service completed successfully");
        }
+       registerFMSettingListner();
    }
 
    @Override
@@ -464,17 +460,6 @@
       return super.onOptionsItemSelected(item);
    }
 
-   private boolean isHdmiOn() {
-      //HDMI and FM concurrecny is not supported.
-      try {
-           String hdmiUserOption = android.provider.Settings.System.getString(
-                                            getContentResolver(), "HDMI_USEROPTION");
-      }catch(Exception ex){
-           Log.d(LOGTAG,"Get HDMI open failed");
-      }
-      return false;
-   }
-
    @Override
    protected Dialog onCreateDialog(int id) {
       switch (id) {
@@ -1392,7 +1377,7 @@
      void startScroll() {
         final TextView textView = mView.get();
            if(textView != null) {
-              mOriginalString = (String) textView.getText();
+              mOriginalString = (String) textView.getText().toString();
               mStringlength = mOriginalString.length();
               if(mStringlength > 0) {
                  mStatus = SCROLLER_STARTING;
