     } else {
         lhs = lhs_in;
     }
-    if ((rhs_in->traits.flags & GHOST_DENSEMAT_SCATTERED) || ((rhs_in->traits.ncols == 1) && (rhs_in->traits.storage == GHOST_DENSEMAT_ROWMAJOR))) {
+    if ((rhs_in->traits.flags & GHOST_DENSEMAT_SCATTERED) || ((rhs_in->traits.ncols == 1) && (rhs_in->traits.storage == GHOST_DENSEMAT_ROWMAJOR) && (rhs_in->stride != 1))) {
         PERFWARNING_LOG("Cloning rhs");
         if (rhs_in->traits.flags & GHOST_DENSEMAT_SCATTERED) {
             PERFWARNING_LOG("Cloning and compressing rhs before operation because it is scattered");
         }
-        if ((rhs_in->traits.ncols == 1) && (rhs_in->traits.storage == GHOST_DENSEMAT_ROWMAJOR)) {
+        if ((rhs_in->traits.ncols == 1) && (rhs_in->traits.storage == GHOST_DENSEMAT_ROWMAJOR) && (rhs_in->stride != 1)) {
             PERFWARNING_LOG("Cloning and transposing rhs before operation because it is row-major");
         }
         ghost_densemat_traits rhstraits = rhs_in->traits;

        zero<dt1>(beta);
    }
    
    CUSPARSE_CALL_RETURN(sell1kernel(cusparse_handle,CUSPARSE_OPERATION_NON_TRANSPOSE,CUSPARSE_OPERATION_TRANSPOSE,SPM_NROWS(mat),rhs->traits.ncols,DM_NROWS(rhs),mat->nEnts,&scale,descr,(dt1 *)mat->cu_val, mat->cu_chunkStart, mat->cu_col, (dt1 *)rhs->cu_val, rhs->stride, &beta, (dt1 *)lhs->cu_val,lhs->stride));
    
    
    GHOST_FUNC_EXIT(GHOST_FUNCTYPE_MATH);

    } else if (!(traits.flags & GHOST_SPMV_AXPBY)) {
        zero<dt1>(beta);
    }
    
    int matncols,nrank;
    ghost_nrank(&nrank,mat->context->mpicomm);
    if (nrank > 1) {
        matncols = mat->context->col_map->dimhalo;
    } else {
        matncols = mat->context->col_map->dim;
    }
    CUSPARSE_CALL_RETURN(sell1kernel(cusparse_handle,CUSPARSE_OPERATION_NON_TRANSPOSE,SPM_NROWS(mat),matncols,mat->nEnts,&scale,descr,(dt1 *)mat->cu_val, mat->cu_chunkStart, mat->cu_col, (dt1 *)rhs->cu_val, &beta, (dt1 *)lhs->cu_val));
   
    GHOST_FUNC_EXIT(GHOST_FUNCTYPE_MATH);
    return GHOST_SUCCESS;
