diff --git a/docs/src/composition.md b/docs/src/composition.md
index f475c8a8c..bd6051cfc 100644
--- a/docs/src/composition.md
+++ b/docs/src/composition.md
@@ -53,16 +53,19 @@ But there are a few differences:
 `merge!` is used to accumulate composition statistics of multiple sequences:
 
 ```@repl
+using BioSequences # hide
 # initiaize an empty composition counter
 comp = composition(dna"");
 
 # iterate over sequences and accumulate composition statistics into `comp`
+seqs = [randdnaseq(10) for i in 1:5]
+
 for seq in seqs
     merge!(comp, composition(seq))
 end
 
 # or functional programming style in one line
-foldl((x, y) -> merge(x, composition(y)), composition(dna""), seqs)
+foldl((x, y) -> merge(x, composition(y)), seqs, init=composition(""))
 ```
 
 `composition` is also applicable to a *k*-mer iterator:
diff --git a/docs/src/random.md b/docs/src/random.md
index 9b99f3a7f..01c58c32d 100644
--- a/docs/src/random.md
+++ b/docs/src/random.md
@@ -25,7 +25,8 @@ SamplerWeighted
 You can make random `Mer` quite simply using `Base.rand`:
 
 ```@repl
+using BioSequences # hide
 rand(DNAMer{7})
 rand(RNAMer{8})
 rand(BigDNAMer{63})
-```
\ No newline at end of file
+```
diff --git a/src/longsequences/indexing.jl b/src/longsequences/indexing.jl
index 0e1d3f765..a260f660d 100644
--- a/src/longsequences/indexing.jl
+++ b/src/longsequences/indexing.jl
@@ -45,6 +45,10 @@ function Base.setindex!(seq::SeqOrView, x, locs::AbstractVector{<:Integer})
 	unsafe_setindex!(seq, x, locs)
 end
 
+function Base.setindex!(seq::SeqOrView, x::BioSequence, locs::AbstractVector{<:Integer})
+	@boundscheck checkbounds(seq, locs)
+	unsafe_setindex!(seq, x, locs)
+end
 
 @inline function unsafe_setindex!(seq::SeqOrView, x, locs::AbstractVector{<:Integer})
 	bin = encode(Alphabet(seq), convert(eltype(seq), x))
@@ -84,10 +88,16 @@ end
 
 # To avoid ambiguity errors
 function Base.setindex!(seq::SeqOrView{A},
-                        other::SeqOrView{A},
+                        other::BioSequence{A},
                         locs::AbstractVector{<:Integer}) where {A <: Alphabet}
     @boundscheck checkbounds(seq, locs)
     checkdimension(other, locs)
+    unsafe_setindex!(seq, other, locs)
+end
+
+function unsafe_setindex!(seq::SeqOrView{A},
+                        other::BioSequence,
+                        locs::AbstractVector{<:Integer}) where {A <: Alphabet}
 	@inbounds for (i, n) in zip(locs, other)
 		seq[i] = n
 	end