diff --git a/boundaries/__init__.py b/boundaries/__init__.py
index afce6f99c69a8581cafb61c22ff6f6357bf302c3..cf94f330fbf384d075886aca1abd8aaf05dc29f0 100644
--- a/boundaries/__init__.py
+++ b/boundaries/__init__.py
@@ -1,5 +1,5 @@
 from pystencils.boundaries.boundaryhandling import BoundaryHandling
-from pystencils.boundaries.boundaryconditions import Neumann
+from pystencils.boundaries.boundaryconditions import Neumann, Dirichlet
 from pystencils.boundaries.inkernel import add_neumann_boundary
 
-__all__ = ['BoundaryHandling', 'Neumann', 'add_neumann_boundary']
+__all__ = ['BoundaryHandling', 'Neumann', 'Dirichlet', 'add_neumann_boundary']
diff --git a/boundaries/boundaryconditions.py b/boundaries/boundaryconditions.py
index db898d98278b5848f6173f2310acc86d5814a894..f1e99e04f4d565a9f5d81ef02e7546010a533269 100644
--- a/boundaries/boundaryconditions.py
+++ b/boundaries/boundaryconditions.py
@@ -1,6 +1,7 @@
+from typing import List, Tuple, Any
 from pystencils import Assignment
 from pystencils.boundaries.boundaryhandling import BoundaryOffsetInfo
-from typing import List, Tuple, Any
+from pystencils.data_types import create_type
 
 
 class Boundary:
@@ -68,3 +69,27 @@ class Neumann(Boundary):
 
     def __eq__(self, other):
         return type(other) == Neumann
+
+
+class Dirichlet(Boundary):
+    def __init__(self, value, name="Dirchlet"):
+        super().__init__(name)
+        self._value = value
+
+    @property
+    def additional_data(self):
+        if callable(self._value):
+            return [('value', create_type("double"))]
+        else:
+            return []
+
+    @property
+    def additional_data_init_callback(self):
+        if callable(self._value):
+            return self._value
+
+    def __call__(self, field, direction_symbol, index_field, **kwargs):
+        if self.additional_data:
+            return [Assignment(field.center, index_field("value"))]
+        if field.index_dimensions == 0:
+            return [Assignment(field.center, self._value)]