diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
index 3713d95af5..7ed8e72dcd 100644
--- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj
+++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
@@ -131,11 +131,13 @@
+
+
diff --git a/BizHawk.Client.Common/movie/MovieRecord.cs b/BizHawk.Client.Common/movie/MovieRecord.cs
new file mode 100644
index 0000000000..761221a376
--- /dev/null
+++ b/BizHawk.Client.Common/movie/MovieRecord.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Client.Common
+{
+ class MovieRecord : IMovieRecord
+ {
+ private List _state = new List();
+
+ public string Input { get; private set; }
+ public bool Lagged { get; private set; }
+ public IEnumerable State
+ {
+ get { return _state; }
+ }
+
+ public MovieRecord()
+ {
+
+ }
+ }
+}
diff --git a/BizHawk.Client.Common/movie/TasMovie.cs b/BizHawk.Client.Common/movie/TasMovie.cs
new file mode 100644
index 0000000000..96e5cfea2f
--- /dev/null
+++ b/BizHawk.Client.Common/movie/TasMovie.cs
@@ -0,0 +1,203 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Client.Common
+{
+ public class TasMovie : IMovie
+ {
+
+ public bool IsCountingRerecords
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool IsActive
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public bool IsPlaying
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public bool IsRecording
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public bool IsFinished
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public bool Changes
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public bool Loaded
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public double FrameCount
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public int InputLogLength
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public ulong Rerecords
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public IMovieHeader Header
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public string Filename
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool Load()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Save()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SaveAs()
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetInputLog()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void StartNewRecording()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void StartNewPlayback()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Stop(bool saveChanges = true)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SwitchToRecord()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SwitchToPlay()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ClearFrame(int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ModifyFrame(string record, int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AppendFrame(string record)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void InsertFrame(string record, int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void InsertBlankFrame(int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void DeleteFrame(int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void TruncateMovie(int frame)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void CommitFrame(int frameNum, Emulation.Common.IController source)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void PokeFrame(int frameNum, string input)
+ {
+ throw new NotImplementedException();
+ }
+
+ public LoadStateResult CheckTimeLines(System.IO.TextReader reader, bool onlyGuid, bool ignoreGuidMismatch, out string errorMessage)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetTime(bool preLoad)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void ExtractInputLog(System.IO.TextReader reader, bool isMultitracking)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetInput(int frame)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
index c410835553..a8786e257a 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
@@ -4,6 +4,7 @@ using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
+
using BizHawk.Client.Common;
namespace BizHawk.Client.EmuHawk