diff --git a/python-api-src/library.h b/python-api-src/library.h
index b5ba825c9e99d42276b9068bab58cac3210f4b9a..f6a91826d3c43329ac5e001c3b7e20debb00cd4c 100644
--- a/python-api-src/library.h
+++ b/python-api-src/library.h
@@ -61,6 +61,7 @@ public:
     }
 };
 
+//todo fixa!
 class PyReplayObserver : public sc2::ReplayObserver
 {
 public:
diff --git a/src/IDAReplayObserver.cpp b/src/IDAReplayObserver.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5a7885c3d51d1c833f7981c2d0a55ac9b1d49961
--- /dev/null
+++ b/src/IDAReplayObserver.cpp
@@ -0,0 +1 @@
+#include "IDAReplayObserver.h"
diff --git a/src/IDAReplayObserver.h b/src/IDAReplayObserver.h
new file mode 100644
index 0000000000000000000000000000000000000000..39b9aa420d4431ba786725985a760733ccebcf8e
--- /dev/null
+++ b/src/IDAReplayObserver.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <deque>
+#include <limits>
+
+#include "Common.h"
+
+#include "MapTools.h"
+#include "BaseLocationManager.h"
+#include "UnitInfoManager.h"
+#include "BuildingPlacer.h"
+#include "TechTree.h"
+#include "TechTreeImproved.h"
+#include "MetaType.h"
+#include "Unit.h"
+
+class IDAReplayObserver : public sc2::ReplayObserver
+{
+	MapTools                m_map;
+	BaseLocationManager     m_bases;
+	UnitInfoManager         m_unitInfo;
+	TechTree                m_techTree;
+	BuildingPlacer          m_buildingPlacer;
+
+	std::vector<Unit>       m_allUnits;
+	std::vector<CCPosition> m_baseLocations;
+
+	void setUnits();
+	void OnError(const std::vector<sc2::ClientError> & client_errors,
+		const std::vector<std::string> & protocol_errors = {}) override;
+
+public:
+	IDAReplayObserver();
+
+	void OnGameStart() override;
+	void OnStep() override;
+
+	const std::vector<Unit> & GetAllUnits() const;
+
+};
+