diff --git a/app/node/block/transition/crossdissolve/CMakeLists.txt b/app/node/block/transition/crossdissolve/CMakeLists.txt
new file mode 100644
index 000000000..21e19a033
--- /dev/null
+++ b/app/node/block/transition/crossdissolve/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Olive - Non-Linear Video Editor
+# Copyright (C) 2019 Olive Team
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+set(OLIVE_SOURCES
+ ${OLIVE_SOURCES}
+ node/block/transition/crossdissolve/crossdissolve.h
+ node/block/transition/crossdissolve/crossdissolve.cpp
+ PARENT_SCOPE
+)
diff --git a/app/node/block/transition/crossdissolve/crossdissolve.cpp b/app/node/block/transition/crossdissolve/crossdissolve.cpp
new file mode 100644
index 000000000..c8ae30d80
--- /dev/null
+++ b/app/node/block/transition/crossdissolve/crossdissolve.cpp
@@ -0,0 +1,54 @@
+#include "crossdissolve.h"
+
+CrossDissolveTransition::CrossDissolveTransition()
+{
+
+}
+
+Node *CrossDissolveTransition::copy() const
+{
+ return new CrossDissolveTransition();
+}
+
+QString CrossDissolveTransition::Name() const
+{
+ return tr("Cross Dissolve");
+}
+
+QString CrossDissolveTransition::id() const
+{
+ return "org.olivevideoeditor.Olive.crossdissolve";
+}
+
+QString CrossDissolveTransition::Description() const
+{
+ return tr("A smooth fade transition from one video clip to another.");
+}
+
+bool CrossDissolveTransition::IsAccelerated() const
+{
+ return true;
+}
+
+QString CrossDissolveTransition::CodeFragment() const
+{
+ return "#version 110\n"
+ "\n"
+ "varying vec2 ove_texcoord;\n"
+ "\n"
+ "uniform sampler2D out_block_in;\n"
+ "uniform sampler2D in_block_in;\n"
+ "\n"
+ "uniform float transition_total_prog;\n"
+ "uniform float transition_out_prog;\n"
+ "uniform float transition_in_prog;\n"
+ "\n"
+ "void main(void) {\n"
+ " vec4 out_tex = texture2D(out_block_in, ove_texcoord);\n"
+ " vec4 in_tex = texture2D(in_block_in, ove_texcoord);\n"
+ " \n"
+ " in_tex *= transition_total_prog;\n"
+ " \n"
+ " gl_FragColor = out_tex - in_tex.a + in_tex;\n"
+ "}\n";
+}
diff --git a/app/node/block/transition/crossdissolve/crossdissolve.h b/app/node/block/transition/crossdissolve/crossdissolve.h
new file mode 100644
index 000000000..c4102b06c
--- /dev/null
+++ b/app/node/block/transition/crossdissolve/crossdissolve.h
@@ -0,0 +1,21 @@
+#ifndef CROSSDISSOLVETRANSITION_H
+#define CROSSDISSOLVETRANSITION_H
+
+#include "../transition.h"
+
+class CrossDissolveTransition : public TransitionBlock
+{
+public:
+ CrossDissolveTransition();
+
+ virtual Node* copy() const override;
+
+ virtual QString Name() const override;
+ virtual QString id() const override;
+ virtual QString Description() const override;
+
+ virtual bool IsAccelerated() const override;
+ virtual QString CodeFragment() const override;
+};
+
+#endif // CROSSDISSOLVETRANSITION_H
diff --git a/app/node/block/transition/diptoblack/CMakeLists.txt b/app/node/block/transition/diptoblack/CMakeLists.txt
new file mode 100644
index 000000000..f66dd5fc1
--- /dev/null
+++ b/app/node/block/transition/diptoblack/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Olive - Non-Linear Video Editor
+# Copyright (C) 2019 Olive Team
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+set(OLIVE_SOURCES
+ ${OLIVE_SOURCES}
+ node/block/transition/diptoblack/diptoblack.h
+ node/block/transition/diptoblack/diptoblack.cpp
+ PARENT_SCOPE
+)
diff --git a/app/node/block/transition/diptoblack/diptoblack.cpp b/app/node/block/transition/diptoblack/diptoblack.cpp
new file mode 100644
index 000000000..d07912c00
--- /dev/null
+++ b/app/node/block/transition/diptoblack/diptoblack.cpp
@@ -0,0 +1,6 @@
+#include "diptoblack.h"
+
+DipToBlackTransition::DipToBlackTransition()
+{
+
+}
diff --git a/app/node/block/transition/diptoblack/diptoblack.h b/app/node/block/transition/diptoblack/diptoblack.h
new file mode 100644
index 000000000..3f0abaa11
--- /dev/null
+++ b/app/node/block/transition/diptoblack/diptoblack.h
@@ -0,0 +1,12 @@
+#ifndef DIPTOBLACKTRANSITION_H
+#define DIPTOBLACKTRANSITION_H
+
+#include "../transition.h"
+
+class DipToBlackTransition : public TransitionBlock
+{
+public:
+ DipToBlackTransition();
+};
+
+#endif // DIPTOBLACKTRANSITION_H