(function() {

    "use strict";

    angular.module('common.dragdrop', [])

    .factory('DragDropHandler', [function() {
        return {
            dragObject: undefined,
            addObject: function(object, objects, to) {
                objects.splice(to, 0, object);
            },
            moveObject: function(objects, from, to) {
                objects.splice(to, 0, objects.splice(from, 1)[0]);
            }
        };
    }])

    .directive('draggable', ['DragDropHandler', function(DragDropHandler) {
        return {
            scope: {
                draggable: '='
            },
            link: function(scope, element, attrs){
                element.draggable({
                    connectToSortable: attrs.draggableTarget,
                    helper: "clone",
                    revert: "invalid",
                    start: function() {
                        DragDropHandler.dragObject = scope.draggable;
                    },
                    stop: function() {
                        DragDropHandler.dragObject = undefined;
                    }
                });

                element.disableSelection();
            }
        };
    }])

    .directive('droppable', ['DragDropHandler', function(DragDropHandler) {
        return {
            scope: {
                droppable: '=',
                ngUpdate: '&',
                ngCreate: '&'
            },
            link: function(scope, element, attrs){
                element.sortable();
                element.disableSelection();
                element.on("sortdeactivate", function(event, ui) {
                    var from = angular.element(ui.item).scope().$index;
                    var to = element.children().index(ui.item);

                    if (to >= 0 ){
                        scope.$apply(function(){
                            if (from >= 0) {
                                DragDropHandler.moveObject(scope.droppable, from, to);
                                scope.ngUpdate({
                                    from: from,
                                    to: to
                                });
                            } else {
                                scope.ngCreate({
                                    object: DragDropHandler.dragObject,
                                    to: to
                                });

                                ui.item.remove();
                            }
                        });
                    }
                });
            }
        };
    }])

;})();
@@ -1346,21 +1346,19 @@
       ng
-Updat
+Mov
 e: '&',%0A
@@ -1735,16 +1735,67 @@
 i.item);
+%0A                    var list = element.attr('id');
 %0A%0A      
@@ -1951,64 +1951,355 @@
     
-  DragDropHandler.moveObject(scope.droppable, from, to);
+//item is coming from a sortable%0A                              if (!ui.sender) %7B%0A                                //item is coming from this sortable%0A                                  DragDropHandler.moveObject(scope.droppable, from, to);%0A                              %7D else %7B%0A                                //item is coming from another sortable
 %0A   
@@ -2339,13 +2339,11 @@
 e.ng
-Updat
+Mov
 e(%7B%0A
@@ -2436,81 +2436,345 @@
 : to
-%0A                                %7D);%0A                            %7D else %7B
+,%0A                                    fromList: ui.sender.attr('id'),%0A                                    toList: list%0A                                %7D);%0A                                ui.item.remove();%0A                              %7D%0A                            %7D else %7B%0A                              //item is coming from a draggable
 %0A   
@@ -2933,16 +2933,64 @@
   to: to
+,%0A                                    list: list
 %0A       
@@ -3010,33 +3010,32 @@
             %7D);%0A
-%0A
                 
@@ -3208,8 +3208,9 @@
 %0A%0A;%7D)();
+%0A

Update dragdrop.js