diff --git a/modules/bindings/pymod/CMakeLists.txt b/modules/bindings/pymod/CMakeLists.txt
index c17cb439fa43bf882cc27031346fafa6ec77b2a8..86fad8a9300c311676602725b8674ae305da63b3 100644
--- a/modules/bindings/pymod/CMakeLists.txt
+++ b/modules/bindings/pymod/CMakeLists.txt
@@ -1 +1,2 @@
-pymod(NAME bindings PY __init__.py lga.py hbplus.py msms.py tmtools.py dssp.py)
+pymod(NAME bindings PY __init__.py lga.py hbplus.py msms.py tmtools.py 
+                       dssp.py clustalw.py utils.py)
diff --git a/modules/bindings/pymod/clustalw.py b/modules/bindings/pymod/clustalw.py
new file mode 100644
index 0000000000000000000000000000000000000000..3625ede812497c0ce96f022b849e7ff0de1fd5b2
--- /dev/null
+++ b/modules/bindings/pymod/clustalw.py
@@ -0,0 +1,22 @@
+from ost.bindings import utils
+from ost import settings, io, seq
+import os
+import subprocess
+
+def ClustalW(seq1, seq2, clustalw=None):
+  clustalw_path=settings.Locate(('clustalw', 'clustalw2'), 
+                                explicit_file_name=clustalw)
+  seq_list=seq.CreateSequenceList()
+  seq_list.AddSequence(seq1)
+  seq_list.AddSequence(seq2)  
+  temp_dir=utils.TempDirWithFiles((seq_list,))
+  out=os.path.join(temp_dir.dirname, 'out.fasta')
+  command='%s -infile="%s" -output=fasta -outfile="%s"' % (clustalw_path,
+                                                           temp_dir.files[0],
+                                                           out)
+  ps=subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
+  ps.stdout.readlines()
+  aln=io.LoadAlignment(out)
+  temp_dir.Cleanup()
+  return aln
+  
\ No newline at end of file
diff --git a/modules/bindings/pymod/utils.py b/modules/bindings/pymod/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..27d4008d8a543df42e21aa2c704516462fa4196c
--- /dev/null
+++ b/modules/bindings/pymod/utils.py
@@ -0,0 +1,47 @@
+import os
+from ost import seq, mol, io
+import tempfile
+def SaveToTempDir(objects, seq_format='fasta', structure_format='pdb'):
+  """
+  Take all objects and saves them to a temporary directory. The paths of the 
+  saved files will be returned as a tuple. This works for alignments, and 
+  structure files. The output format for sequence files and structure files can
+  be changed by setting to seq_format and structure_format parameters 
+  appropriately.
+  """
+  # create temporary directory
+  tmp_dir_name=tempfile.mkdtemp()
+  file_names=[]
+  for index, obj in enumerate(objects):
+    if isinstance(obj, seq.AlignmentHandle):
+      name=os.path.join(tmp_dir_name, 'aln%02d.fasta' % (index+1))
+      io.SaveAlignment(obj, name, seq_format)
+      file_names.append(name)
+      continue
+    if isinstance(obj, seq.SequenceHandle):
+      name=os.path.join(tmp_dir_name, 'seq%02d.fasta' % (index+1))
+      io.SaveSequence(obj, name, seq_format)
+      file_names.append(name)
+      continue
+    if isinstance(obj, seq.ConstSequenceList) or isinstance(obj, seq.SequenceList):
+      name=os.path.join(tmp_dir_name, 'sql%02d.fasta' % (index+1))
+      io.SaveSequenceList(obj, name, seq_format)
+      file_names.append(name)
+      continue
+    if isinstance(obj, mol.EntityView) or isinstance(obj, mol.EntityHandle):
+      name=os.path.join(tmp_dir_name, tmp_dir_name, 'mol%02d.pdb' % (index+1))
+      io.SaveEntity(model, name, structure_format)
+      file_names.append(name)
+      continue
+  return file_names
+  
+class TempDirWithFiles:
+  def __init__(self, objects, seq_format='fasta', structure_format='pdb'):
+    self.files=SaveToTempDir(objects, seq_format=seq_format, 
+                             structure_format=structure_format)
+    self.dirname=os.path.dirname(self.files[0])
+  def Cleanup(self):
+    import shutil
+    shutil.rmtree(self.dirname)
+
+