diff --git a/src/blockarray.jl b/src/blockarray.jl
index 124226d7..0f28bb61 100644
--- a/src/blockarray.jl
+++ b/src/blockarray.jl
@@ -330,7 +330,7 @@ copy(A::BlockArray) = _BlockArray(map(copy,A.blocks), A.axes)
 ################################
 @inline axes(block_array::BlockArray) = block_array.axes
 
-function viewblock(block_arr::BlockArray, block)
+@propagate_inbounds function viewblock(block_arr::BlockArray, block::Block)
     blks = block.n
     @boundscheck blockcheckbounds(block_arr, blks...)
     block_arr.blocks[blks...]
diff --git a/src/blocklinalg.jl b/src/blocklinalg.jl
index 04dfdd38..b5847b51 100644
--- a/src/blocklinalg.jl
+++ b/src/blocklinalg.jl
@@ -300,7 +300,7 @@ function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A::AbstractMatrix{T},
     for K = blockaxes(A,1)
         b_2 = view(b, K)
         Ũ = _triangular_matrix(Val('U'), UNIT, view(A, K,K))
-        materialize!(Lmul(Ũ, b_2))
+        lmul!(Ũ, b_2)
         JR = (K+1):last(blockrowsupport(A,K))
         if !isempty(JR)
             muladd!(one(T), view(A, K, JR), view(b,JR), one(T), b_2)
@@ -318,7 +318,7 @@ function _matchingblocks_triangular_mul!(::Val{'L'}, UNIT, A::AbstractMatrix{T},
     for K = N:-1:1
         b_2 = view(b, Block(K))
         L̃ = _triangular_matrix(Val('L'), UNIT, view(A, Block(K,K)))
-        materialize!(Lmul(L̃, b_2))
+        lmul!(L̃, b_2)
         JR = blockrowstart(A,Block(K)):Block(K-1)
         if !isempty(JR)
             muladd!(one(T), view(A, Block(K), JR), view(b,JR), one(T), b_2)
diff --git a/src/views.jl b/src/views.jl
index 499e917d..75338b16 100644
--- a/src/views.jl
+++ b/src/views.jl
@@ -131,10 +131,11 @@ block(A::Block) = A
 @inline Base.view(block_arr::AbstractBlockArray{<:Any,N}, blocks::Vararg{BlockSlice1, N}) where N =
     view(block_arr, map(block,blocks)...)
 
-const BlockSlices = Union{Base.Slice,BlockSlice{<:BlockRange{1}}}
+const BlockSlices = Union{Base.Slice,BlockSlice{<:Union{BlockRange{1},Block{1}}}}
 # Base.view(V::SubArray{<:Any,N,NTuple{N,BlockSlices}},
 
-_block_reindex(b::BlockSlice, i::Block{1}) = b.block[Int(i)]
+_block_reindex(b::BlockSlice{<:Block{1}}, i::Block{1}) = Block(b.block.n[Int(i)])
+_block_reindex(b::BlockSlice{<:BlockRange{1}}, i::Block{1}) = b.block[Int(i)]
 _block_reindex(b::Slice, i::Block{1}) = i
 
 @inline Base.view(V::SubArray{<:Any,N,<:AbstractBlockArray,<:NTuple{N,BlockSlices}}, block::Block{N}) where N =
diff --git a/test/test_blockviews.jl b/test/test_blockviews.jl
index 27131a0d..10984a51 100644
--- a/test/test_blockviews.jl
+++ b/test/test_blockviews.jl
@@ -182,6 +182,11 @@ bview(a, b) = Base.invoke(view, Tuple{AbstractArray,Any}, a, b)
         @test stringmime("text/plain", W) == "3×1 view(::BlockMatrix{$Int, Matrix{Matrix{$Int}}"*
             ", $(typeof(axes(A)))}, $(Wi[1]), $(Wi[2])) "*
             "with eltype $Int with indices $(axes(W,1))×$(axes(W,2)):\n 1\n ─\n 4\n 7"
+
+        Vv = view(V, Block(1), Block(2))
+        @test Vv === blocks(A)[1,2]
+        Wv = view(W, Block(2), Block(1))
+        @test Wv === blocks(A)[2,1]
     end
 
     @testset "getindex with BlockRange" begin