diff --git a/engines/sci/util.h b/engines/sci/util.h
index 85c20dc..70bb26e 100644
--- a/engines/sci/util.h
+++ b/engines/sci/util.h
@@ -369,6 +369,9 @@ template <typename ValueType>
 class Span {
 	friend class SpanInternal::SpanIterator<Span<ValueType> >;
 	friend class SpanInternal::ConstSpanIterator<Span<ValueType> >;
+#if !defined(__GNUC__) || GCC_ATLEAST(3, 0)
+	template<class T> friend class Span;
+#endif
 
 public:
 	typedef ValueType value_type;
@@ -394,6 +397,12 @@ public:
 		copyData(other);
 	}
 
+	template<class T>
+	inline Span(const Span<T> &other) {
+		copyData(other);
+	}
+
+
 	inline Span(Common::File &file, index_type size = -1) {
 		const index_type position = file.pos();
 
@@ -421,6 +430,18 @@ public:
 		return *this;
 	}
 
+	template<class T>
+	inline Span<value_type> &operator=(const Span<T> &other) {
+		if (this == &other) {
+			return *this;
+		}
+
+		reset();
+		copyData(other);
+		return *this;
+	}
+
+
 	virtual ~Span() {
 		reset();
 	}
@@ -570,7 +591,8 @@ protected:
 	index_type _sourceByteOffset;
 	SpanDispose _dispose;
 
-	inline void copyData(const Span &other) {
+	template<class T>
+	inline void copyData(const Span<T> &other) {
 		if (other._dispose != kSpanDisposeNone) {
 			void *buf = malloc(other.byteSize());
 			memcpy(buf, other.data, other.byteSize());
