* #25270 Overall improvements of transitions between calls and call actions
* #25117 Refactor and stability
diff --git a/src/com/savoirfairelinux/sflphone/service/SipService.java b/src/com/savoirfairelinux/sflphone/service/SipService.java
index 94afa54..3ab830e 100644
--- a/src/com/savoirfairelinux/sflphone/service/SipService.java
+++ b/src/com/savoirfairelinux/sflphone/service/SipService.java
@@ -114,6 +114,7 @@
         callFilter.addAction(CallManagerCallBack.CONF_CREATED);
         callFilter.addAction(CallManagerCallBack.CONF_REMOVED);
         callFilter.addAction(CallManagerCallBack.CONF_CHANGED);
+        callFilter.addAction(CallManagerCallBack.RECORD_STATE_CHANGED);
         receiver = new IncomingReceiver(this, mBinder);
         LocalBroadcastManager.getInstance(this).registerReceiver(receiver, callFilter);
 
@@ -771,28 +772,29 @@
         }
 
         @Override
-        public List getConferenceList() throws RemoteException {
-            class ConfList extends SipRunnableWithReturn {
-                @Override
-                protected StringVect doRun() throws SameThreadException {
-                    Log.i(TAG, "SipService.getConferenceList() thread running...");
-                    return callManagerJNI.getConferenceList();
-                }
-            }
-            ;
-            ConfList runInstance = new ConfList();
-            getExecutor().execute(runInstance);
-            while (!runInstance.isDone()) {
-                // Log.w(TAG, "Waiting for getConferenceList");
-            }
-            StringVect swigvect = (StringVect) runInstance.getVal();
-
-            ArrayList<String> nativelist = new ArrayList<String>();
-
-            for (int i = 0; i < swigvect.size(); i++)
-                nativelist.add(swigvect.get(i));
-
-            return nativelist;
+        public HashMap<String, Conference> getConferenceList() throws RemoteException {
+//            class ConfList extends SipRunnableWithReturn {
+//                @Override
+//                protected StringVect doRun() throws SameThreadException {
+//                    Log.i(TAG, "SipService.getConferenceList() thread running...");
+//                    return callManagerJNI.getConferenceList();
+//                }
+//            }
+//            ;
+//            ConfList runInstance = new ConfList();
+//            getExecutor().execute(runInstance);
+//            while (!runInstance.isDone()) {
+//                // Log.w(TAG, "Waiting for getConferenceList");
+//            }
+//            StringVect swigvect = (StringVect) runInstance.getVal();
+//
+//            ArrayList<String> nativelist = new ArrayList<String>();
+//
+//            for (int i = 0; i < swigvect.size(); i++)
+//                nativelist.add(swigvect.get(i));
+//
+//            return nativelist;
+            return current_confs;
         }
 
         @Override
@@ -880,6 +882,26 @@
         }
         
         @Override
+        public boolean isRecording(final String id) throws RemoteException {
+            class IsRecording extends SipRunnableWithReturn {
+
+                @Override
+                protected Boolean doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isRecording() thread running...");
+                    return callManagerJNI.getIsRecording(id);
+                }
+            }
+
+            IsRecording runInstance = new IsRecording();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Boolean) runInstance.getVal();
+            
+        }
+        
+        @Override
         public boolean startRecordedFilePlayback(final String filepath) throws RemoteException {
             getExecutor().execute(new SipRunnable() {
                 @Override
@@ -1027,6 +1049,24 @@
             nm.cancel(NOTIFICATION_ID);
         }
 
+        @Override
+        public Conference getCurrentCall() throws RemoteException {
+            for(SipCall i : current_calls.values()){
+                if(i.isOngoing()){
+                    Conference tmp = new Conference("-1");
+                    tmp.getParticipants().add(i);
+                    return tmp;
+                }
+            }
+            
+            if(!current_confs.isEmpty()){
+                return (Conference) current_confs.values().toArray()[0];
+            }
+            return null;
+        }
+
+        
+
 
 
     };