RS.RenderStepped:Connect(function()
    if mouse.Target then
        if toggle == true and mouse.Target == workspace.Table or mouse.Target.Parent.Name == "Sandwich" or mouse.Target.Parent.Name == plr.Name .. "_Foods" then
            local pos1 = math.floor(mouse.Hit.X / GridSize + 0.5) * GridSize
            local pos2 = mouse.Hit.Y
            local pos3 = math.floor(mouse.Hit.Z / GridSize + 0.5) * GridSize
            part.CFrame = CFrame.new(Vector3.new(pos1,pos2,pos3))*CFrame.Angles(0,math.rad(ori),math.rad(tilt)) + mouse.Target.CFrame.RightVector * part.Size.Z / 2
        end
    end
end)

When I place cylinder, I want it to look up and place it on top surface of part but since its orientation gets changed, UpVector doesn't works quiet well and most likely cylinder is just flying (Because of sizes), how would I fix it? I tried RightVector, but it doesn't works better also, it moves part not on top, but middle of cylinder being on top surface (its half inside) and it isn't in center of mouse position.