diff --git a/src/Reactor/Nucleus.cpp b/src/Reactor/Nucleus.cpp
index 179afb7..712dc7b 100644
--- a/src/Reactor/Nucleus.cpp
+++ b/src/Reactor/Nucleus.cpp
@@ -3540,6 +3540,19 @@
 		storeValue(rhs.value);
 	}
 
+	Short8::Short8(RValue<Short4> lo, RValue<Short4> hi)
+	{
+		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
+		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
+
+		Value *long2 = UndefValue::get(Long2::getType());
+		long2 = Nucleus::createInsertElement(long2, loLong, 0);
+		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
+		Value *short8 = Nucleus::createBitCast(long2, Short8::getType());
+
+		storeValue(short8);
+	}
+
 	RValue<Short8> operator+(RValue<Short8> lhs, RValue<Short8> rhs)
 	{
 		return RValue<Short8>(Nucleus::createAdd(lhs.value, rhs.value));
@@ -3560,19 +3573,6 @@
 		return x86::psraw(lhs, rhs);   // FIXME: Fallback required
 	}
 
-	RValue<Short8> Concatenate(RValue<Short4> lo, RValue<Short4> hi)
-	{
-		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
-		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
-
-		Value *long2 = UndefValue::get(Long2::getType());
-		long2 = Nucleus::createInsertElement(long2, loLong, 0);
-		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
-		Value *short8 = Nucleus::createBitCast(long2, Short8::getType());
-
-		return RValue<Short8>(short8);
-	}
-
 	RValue<Int4> MulAdd(RValue<Short8> x, RValue<Short8> y)
 	{
 		return x86::pmaddwd(x, y);   // FIXME: Fallback required
@@ -3612,6 +3612,19 @@
 		storeValue(rhs.value);
 	}
 
+	UShort8::UShort8(RValue<UShort4> lo, RValue<UShort4> hi)
+	{
+		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
+		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
+
+		Value *long2 = UndefValue::get(Long2::getType());
+		long2 = Nucleus::createInsertElement(long2, loLong, 0);
+		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
+		Value *short8 = Nucleus::createBitCast(long2, Short8::getType());
+
+		storeValue(short8);
+	}
+
 	RValue<UShort8> UShort8::operator=(RValue<UShort8> rhs) const
 	{
 		storeValue(rhs.value);
@@ -3697,19 +3710,6 @@
 		return RValue<UShort8>(short8);
 	}
 
-	RValue<UShort8> Concatenate(RValue<UShort4> lo, RValue<UShort4> hi)
-	{
-		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
-		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
-
-		Value *long2 = UndefValue::get(Long2::getType());
-		long2 = Nucleus::createInsertElement(long2, loLong, 0);
-		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
-		Value *short8 = Nucleus::createBitCast(long2, Short8::getType());
-
-		return RValue<UShort8>(short8);
-	}
-
 	RValue<UShort8> MulHigh(RValue<UShort8> x, RValue<UShort8> y)
 	{
 		return x86::pmulhuw(x, y);   // FIXME: Fallback required
@@ -4621,6 +4621,17 @@
 		storeValue(value);
 	}
 
+	Int2::Int2(RValue<Int> lo, RValue<Int> hi)
+	{
+		Constant *shuffle[2];
+		shuffle[0] = Nucleus::createConstantInt(0);
+		shuffle[1] = Nucleus::createConstantInt(1);
+
+		Value *packed = Nucleus::createShuffleVector(Nucleus::createBitCast(lo.value, VectorType::get(Int::getType(), 1)), Nucleus::createBitCast(hi.value, VectorType::get(Int::getType(), 1)), Nucleus::createConstantVector(shuffle, 2));
+
+		storeValue(Nucleus::createBitCast(packed, Int2::getType()));
+	}
+
 	RValue<Int2> Int2::operator=(RValue<Int2> rhs) const
 	{
 		storeValue(rhs.value);
@@ -4865,17 +4876,6 @@
 		}
 	}
 
-	RValue<Int2> Concatenate(RValue<Int> lo, RValue<Int> hi)
-	{
-		Constant *shuffle[2];
-		shuffle[0] = Nucleus::createConstantInt(0);
-		shuffle[1] = Nucleus::createConstantInt(1);
-
-		Value *packed = Nucleus::createShuffleVector(Nucleus::createBitCast(lo.value, VectorType::get(Int::getType(), 1)), Nucleus::createBitCast(hi.value, VectorType::get(Int::getType(), 1)), Nucleus::createConstantVector(shuffle, 2));
-
-		return RValue<Int2>(Nucleus::createBitCast(packed, Int2::getType()));
-	}
-
 	RValue<Int> Extract(RValue<Int2> val, int i)
 	{
 		if(false)   // FIXME: LLVM does not generate optimal code
@@ -5335,6 +5335,19 @@
 		storeValue(value);
 	}
 
+	Int4::Int4(RValue<Int2> lo, RValue<Int2> hi)
+	{
+		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
+		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
+
+		Value *long2 = UndefValue::get(Long2::getType());
+		long2 = Nucleus::createInsertElement(long2, loLong, 0);
+		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
+		Value *int4 = Nucleus::createBitCast(long2, Int4::getType());
+
+		storeValue(int4);
+	}
+
 	RValue<Int4> Int4::operator=(RValue<Int4> rhs) const
 	{
 		storeValue(rhs.value);
@@ -5549,19 +5562,6 @@
 		return x86::packssdw(x, y);
 	}
 
-	RValue<Int4> Concatenate(RValue<Int2> lo, RValue<Int2> hi)
-	{
-		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
-		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
-
-		Value *long2 = UndefValue::get(Long2::getType());
-		long2 = Nucleus::createInsertElement(long2, loLong, 0);
-		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
-		Value *int4 = Nucleus::createBitCast(long2, Int4::getType());
-
-		return RValue<Int4>(int4);
-	}
-
 	RValue<Int> Extract(RValue<Int4> x, int i)
 	{
 		return RValue<Int>(Nucleus::createExtractElement(x.value, i));
@@ -5680,6 +5680,19 @@
 		storeValue(value);
 	}
 
+	UInt4::UInt4(RValue<UInt2> lo, RValue<UInt2> hi)
+	{
+		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
+		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
+
+		Value *long2 = UndefValue::get(Long2::getType());
+		long2 = Nucleus::createInsertElement(long2, loLong, 0);
+		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
+		Value *uint4 = Nucleus::createBitCast(long2, Int4::getType());
+
+		storeValue(uint4);
+	}
+
 	RValue<UInt4> UInt4::operator=(RValue<UInt4> rhs) const
 	{
 		storeValue(rhs.value);
@@ -5889,19 +5902,6 @@
 		return x86::packusdw(x, y);   // FIXME: Fallback required
 	}
 
-	RValue<UInt4> Concatenate(RValue<UInt2> lo, RValue<UInt2> hi)
-	{
-		Value *loLong = Nucleus::createBitCast(lo.value, Long::getType());
-		Value *hiLong = Nucleus::createBitCast(hi.value, Long::getType());
-
-		Value *long2 = UndefValue::get(Long2::getType());
-		long2 = Nucleus::createInsertElement(long2, loLong, 0);
-		long2 = Nucleus::createInsertElement(long2, hiLong, 1);
-		Value *uint4 = Nucleus::createBitCast(long2, Int4::getType());
-
-		return RValue<UInt4>(uint4);
-	}
-
 	Type *UInt4::getType()
 	{
 		return VectorType::get(UInt::getType(), 4);
@@ -6916,7 +6916,7 @@
 				Int2 lo = x86::cvtps2pi(val);
 				Int2 hi = x86::cvtps2pi(Swizzle(val, 0xEE));
 
-				return Concatenate(lo, hi);
+				return Int4(lo, hi);
 			}
 		}
 
@@ -7436,7 +7436,7 @@
 				Short4 lo = x86::packssdw(loX, hiX);
 				Short4 hi = x86::packssdw(loY, hiY);
 
-				return Concatenate(lo, hi);
+				return Short8(lo, hi);
 			}
 		}
 
@@ -7545,7 +7545,7 @@
 				lo = x86::pslld(lo, y);
 				hi = x86::pslld(hi, y);
 
-				return Concatenate(lo, hi);
+				return Int4(lo, hi);
 			}
 		}
 
@@ -7574,7 +7574,7 @@
 				lo = x86::psrad(lo, y);
 				hi = x86::psrad(hi, y);
 
-				return Concatenate(lo, hi);
+				return Int4(lo, hi);
 			}
 		}
 
@@ -7603,7 +7603,7 @@
 				lo = x86::psrld(lo, y);
 				hi = x86::psrld(hi, y);
 
-				return Concatenate(lo, hi);
+				return UInt4(lo, hi);
 			}
 		}
 
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index a7aaf79..b134149 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -1058,6 +1058,7 @@
 		Short8(RValue<Short8> rhs);
 	//	Short8(const Short8 &rhs);
 	//	Short8(const Reference<Short8> &rhs);
+		Short8(RValue<Short4> lo, RValue<Short4> hi);
 
 	//	RValue<Short8> operator=(RValue<Short8> rhs) const;
 	//	RValue<Short8> operator=(const Short8 &rhs) const;
@@ -1102,7 +1103,6 @@
 //	RValue<Bool> operator!=(RValue<Short8> lhs, RValue<Short8> rhs);
 //	RValue<Bool> operator==(RValue<Short8> lhs, RValue<Short8> rhs);
 
-	RValue<Short8> Concatenate(RValue<Short4> lo, RValue<Short4> hi);
 	RValue<Short8> MulHigh(RValue<Short8> x, RValue<Short8> y);
 	RValue<Int4> MulAdd(RValue<Short8> x, RValue<Short8> y);
 
@@ -1114,6 +1114,7 @@
 		UShort8(RValue<UShort8> rhs);
 	//	UShort8(const UShort8 &rhs);
 	//	UShort8(const Reference<UShort8> &rhs);
+		UShort8(RValue<UShort4> lo, RValue<UShort4> hi);
 
 		RValue<UShort8> operator=(RValue<UShort8> rhs) const;
 		RValue<UShort8> operator=(const UShort8 &rhs) const;
@@ -1159,7 +1160,6 @@
 //	RValue<Bool> operator==(RValue<UShort8> lhs, RValue<UShort8> rhs);
 
     RValue<UShort8> Swizzle(RValue<UShort8> x, char select0, char select1, char select2, char select3, char select4, char select5, char select6, char select7);
-	RValue<UShort8> Concatenate(RValue<UShort4> lo, RValue<UShort4> hi);
     RValue<UShort8> MulHigh(RValue<UShort8> x, RValue<UShort8> y);
 
 	class Int : public Variable<Int>
@@ -1512,6 +1512,7 @@
 		Int2(RValue<Int2> rhs);
 		Int2(const Int2 &rhs);
 		Int2(const Reference<Int2> &rhs);
+		Int2(RValue<Int> lo, RValue<Int> hi);
 
 		RValue<Int2> operator=(RValue<Int2> rhs) const;
 		RValue<Int2> operator=(const Int2 &rhs) const;
@@ -1561,7 +1562,6 @@
 //	RValue<Int2> RoundInt(RValue<Float4> cast);
 	RValue<Long1> UnpackLow(RValue<Int2> x, RValue<Int2> y);
 	RValue<Long1> UnpackHigh(RValue<Int2> x, RValue<Int2> y);
-	RValue<Int2> Concatenate(RValue<Int> lo, RValue<Int> hi);
 	RValue<Int> Extract(RValue<Int2> val, int i);
 	RValue<Int2> Insert(RValue<Int2> val, RValue<Int> element, int i);
 
@@ -1639,6 +1639,7 @@
 		Int4(RValue<UInt4> rhs);
 		Int4(const UInt4 &rhs);
 		Int4(const Reference<UInt4> &rhs);
+		Int4(RValue<Int2> lo, RValue<Int2> hi);
 
 		RValue<Int4> operator=(RValue<Int4> rhs) const;
 		RValue<Int4> operator=(const Int4 &rhs) const;
@@ -1696,7 +1697,6 @@
 	RValue<Int4> Min(RValue<Int4> x, RValue<Int4> y);
 	RValue<Int4> RoundInt(RValue<Float4> cast);
 	RValue<Short8> Pack(RValue<Int4> x, RValue<Int4> y);
-	RValue<Int4> Concatenate(RValue<Int2> lo, RValue<Int2> hi);
 	RValue<Int> Extract(RValue<Int4> x, int i);
 	RValue<Int4> Insert(RValue<Int4> val, RValue<Int> element, int i);
 	RValue<Int> SignMask(RValue<Int4> x);
@@ -1719,6 +1719,7 @@
 		UInt4(RValue<Int4> rhs);
 		UInt4(const Int4 &rhs);
 		UInt4(const Reference<Int4> &rhs);
+		UInt4(RValue<UInt2> lo, RValue<UInt2> hi);
 
 		RValue<UInt4> operator=(RValue<UInt4> rhs) const;
 		RValue<UInt4> operator=(const UInt4 &rhs) const;
@@ -1776,7 +1777,6 @@
 	RValue<UInt4> Min(RValue<UInt4> x, RValue<UInt4> y);
 //	RValue<UInt4> RoundInt(RValue<Float4> cast);
 	RValue<UShort8> Pack(RValue<UInt4> x, RValue<UInt4> y);
-	RValue<UInt4> Concatenate(RValue<UInt2> lo, RValue<UInt2> hi);
 
 	template<int T>
 	class Swizzle2Float4
