diff --git a/align.m b/align.m
new file mode 100644
index 0000000000000000000000000000000000000000..e101ed235abf53c462d25dcd14c648953c3b0939
--- /dev/null
+++ b/align.m
@@ -0,0 +1,27 @@
+function [Val1,Off1,Val2,Off2] = align(Val1,Off1,Val2,Off2)
+%ALIGN Summary of this function goes here
+%   Detailed explanation goes here
+
+if isempty(Val1)
+    Val1 = Val2;
+    Off1 = Off2;
+elseif ~isempty(Val2)
+    Size1 = size(Val1);
+    Size2 = size(Val2);
+    
+    Max1 = Off1+Size1;
+    Max2 = Off2+Size2;
+    
+    Off_ = min(Off1,Off2);
+    Max_ = max(Max1,Max2);
+    
+    Val1 = padarray(Val1,Off1-Off_,nan,'pre');
+    Val2 = padarray(Val2,Off2-Off_,nan,'pre');
+    
+    Off1 = Off_;
+    Off2 = Off_;
+
+    Val1 = padarray(Val1,Max_-Max1,nan,'post');
+    Val2 = padarray(Val2,Max_-Max2,nan,'post');
+end
+end
\ No newline at end of file
diff --git a/alignJoin.m b/alignJoin.m
new file mode 100644
index 0000000000000000000000000000000000000000..c0e88ab59a92599d45843e05791b488e24bb1704
--- /dev/null
+++ b/alignJoin.m
@@ -0,0 +1,33 @@
+function [Val1,Off1,Val2,Off2] = alignJoin(Val1,Off1,Val2,Off2)
+%ALIGNJOIN Summary of this function goes here
+%   Detailed explanation goes here
+
+if isempty(Val1)
+    Val1 = Val2;
+    Off1 = Off2;
+elseif ~isempty(Val2)
+    Size1 = size(Val1);
+    Size2 = size(Val2);
+    
+    Max1 = Off1+Size1;
+    Max2 = Off2+Size2;
+    
+    Off_ = min(Off1,Off2);
+    Max_ = max(Max1,Max2);
+    
+    Val1 = padarray(Val1,Off1-Off_,nan,'pre');
+    Val2 = padarray(Val2,Off2-Off_,nan,'pre');
+    
+    Off1 = Off_;
+    Off2 = Off_;
+
+    Val1 = padarray(Val1,Max_-Max1,nan,'post');
+    Val2 = padarray(Val2,Max_-Max2,nan,'post');
+    
+    M1 = ~isnan(Val1);
+    M2 = ~isnan(Val2);
+    
+    Val1(M1) = Val1(M1);
+    Val1(M2) = Val2(M2);
+end
+end
\ No newline at end of file
diff --git a/join.m b/join.m
new file mode 100644
index 0000000000000000000000000000000000000000..511db61da6e6f560e39b3e6efe88998b7387471d
--- /dev/null
+++ b/join.m
@@ -0,0 +1,14 @@
+function Val1 = join(Val1,Val2)
+%JOIN Summary of this function goes here
+%   Detailed explanation goes here
+
+if isempty(Val1)
+    Val1 = Val2;
+elseif ~isempty(Val2)
+    M1 = ~isnan(Val1);
+    M2 = ~isnan(Val2);
+    
+    Val1(M1) = Val1(M1);
+    Val1(M2) = Val2(M2);
+end
+end
\ No newline at end of file
diff --git a/split.m b/split.m
new file mode 100644
index 0000000000000000000000000000000000000000..0e6b3023cf598c6b01a53f2027abbcbf12245611
--- /dev/null
+++ b/split.m
@@ -0,0 +1,8 @@
+function [M1,M2] = split(M,Mask)
+%SPLIT Summary of this function goes here
+%   Detailed explanation goes here
+
+[M1,M2] = deal(M);
+M1(~Mask) = NaN;
+M2( Mask) = NaN;
+end
\ No newline at end of file