This should suffice:
```diff
  xbmc/video/PlayerController.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/xbmc/video/PlayerController.cpp b/xbmc/video/PlayerController.cpp
index 4cfb3ea..e2f1b89 100644
--- a/xbmc/video/PlayerController.cpp
+++ b/xbmc/video/PlayerController.cpp
@@ -52,6 +52,7 @@ bool CPlayerController::OnAction(const CAction &action)
 {
   const unsigned int MsgTime = 300;
   const unsigned int DisplTime = 2000;
+  bool cyclesubs = false;
 
   if (g_application.m_pPlayer->IsPlayingVideo())
   {
@@ -84,6 +85,8 @@ bool CPlayerController::OnAction(const CAction &action)
         return true;
       }
 
+      case ACTION_CYCLE_SUBTITLE:
+        cyclesubs = true;
       case ACTION_NEXT_SUBTITLE:
       {
         if (g_application.m_pPlayer->GetSubtitleCount() == 0)
@@ -98,8 +101,11 @@ bool CPlayerController::OnAction(const CAction &action)
           if (CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream >= g_application.m_pPlayer->GetSubtitleCount())
           {
             CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream = 0;
-            CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn = false;
-            g_application.m_pPlayer->SetSubtitleVisible(false);
+            if (cyclesubs)
+            {
+              CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleOn = false;
+              g_application.m_pPlayer->SetSubtitleVisible(false);
+            }
           }
           g_application.m_pPlayer->SetSubtitle(CMediaSettings::Get().GetCurrentVideoSettings().m_SubtitleStream);
         }

```

Now cycle will disable subs when called for the last sub and next will advance to the first sub.