anchor.diff:      INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_row_end
       INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_col_start
       INTEGER, DIMENSION(:), ALLOCATABLE :: per_proc_col_end
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: elements_per_proc
       !! Send Buffer
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: send_per_proc
       INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_offsets
       INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_row
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_column
  -    INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_values
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: send_buffer_col
  +    REAL(NTREAL), DIMENSION(:), ALLOCATABLE :: send_buffer_val
  +    !! Receive Buffer
  +    INTEGER :: recv_buffer_size
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: recv_buffer_offsets
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: recv_per_proc
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: recv_buffer_row
  +    INTEGER, DIMENSION(:), ALLOCATABLE :: recv_buffer_col
  +    REAL(NTREAL), DIMENSION(:), ALLOCATABLE :: recv_buffer_val
       !! Temporary
       INTEGER :: counter, p_counter
  +    INTEGER :: temporary
   
       !! Merge all the local data
       CALL MergeLocalBlocks(this, merged_local_data)
  
positive.code: 
      !! Build a send buffer
      ALLOCATE(send_buffer_offsets(total_processors))
  
      !! Send
  
      !! Cleanup
      DEALLOCATE(send_buffer_offsets)
      DEALLOCATE(elements_per_proc)
      DEALLOCATE(per_proc_row_start)
      DEALLOCATE(per_proc_row_end)
      DEALLOCATE(per_proc_col_start)
  
negative.code:   !! Data is returned with absolute coordinates.
    !! @param[in] this the distributed sparse matrix.
    !! @param[inout] triplet_list the list to fill.
    SUBROUTINE GetRowColumn(this, triplet_list, row_start, row_end, &
         & column_start, column_end)
      !! Parameters
      TYPE(DistributedSparseMatrix_t), INTENT(IN) :: this
  