Also... der Code ist sehr lang.