diff --git a/da/platform/fmi.py b/da/platform/fmi.py
new file mode 100755
index 0000000000000000000000000000000000000000..9b047d4e3542708732415c7c7aebf3b54639e306
--- /dev/null
+++ b/da/platform/fmi.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# fmi.py
+
+"""
+Author : Aki 
+
+Revision History:
+File created on 25 Jun 2013.
+
+"""
+
+import logging
+import subprocess
+
+from da.baseclasses.platform import Platform
+std_joboptions = {'jobaccount':'ch4'}
+
+class FmiPlatform(Platform):
+    def __init__(self):
+        self.ID     = 'FMI voima'    # the identifier gives the platform name
+        self.version = ''     # the platform version used
+
+    #def give_blocking_flag(self):
+    #    """
+    #    Returns a blocking flag, which is important if tm5 is submitted in a queue system. The python ctdas code is forced to wait before tm5 run is finished
+    #    """
+    #    return "-s"
+
+    #def give_queue_type(self):
+    #    """
+    #    Return a queue type depending whether your computer system has a queue system, or whether you prefer to run in the foreground. 
+    #    On most large systems using the queue is mandatory if you run a large job.
+    #    """
+    #    return "queue"
+
+    def get_job_template(self, joboptions={}, block=False):
+        """ 
+        Returns the job template for a given computing system, and fill it with options from the dictionary provided as argument.
+        The job template should return the preamble of a job that can be submitted to a queue on your platform, 
+        examples of popular queuing systems are:
+            - SGE
+            - MOAB
+            - XGrid
+            -
+
+        A list of job options can be passed through a dictionary, which are then filled in on the proper line,
+        an example is for instance passing the dictionary {'account':'co2'} which will be placed 
+        after the ``-A`` flag in a ``qsub`` environment.
+
+        An extra option ``block`` has been added that allows the job template to be configured to block the current
+        job until the submitted job in this template has been completed fully.
+        """
+
+        template = """#!/bin/bash"""+ \
+                   """ \n"""+ \
+                   """ \n"""+ \
+                   """#PBS -N jobname \n"""+ \
+                   """#PBS -j oe \n"""+ \
+                   """#PBS -l walltime=jobtime \n"""+ \
+                   """#PBS -l mppwidth=jobpes \n"""+ \
+                   """#PBS -l mppnppn=jobnodes \n"""+ \
+                   """\n"""
+
+        if 'depends' in joboptions:
+            template += """#$ -hold_jid depends \n"""
+
+        # First replace from passed dictionary
+        for k,v in joboptions.iteritems():
+            while k in template:
+                template = template.replace(k,v)
+
+        # Fill remaining values with std_options
+        for k,v in std_joboptions.iteritems():
+            while k in template:
+                template = template.replace(k,v)
+
+        return template
+
+
+        #msg1  = 'Platform initialized: %s'%self.Identifier      ; logging.info(msg1)
+        #msg2  = '%s version: %s'%(self.Identifier,self.Version) ; logging.info(msg2)
+
+
+    def submit_job(self, jobfile, joblog=None, block=False):
+        """ This method submits a jobfile to the queue, and returns the queue ID """
+
+        if block:
+            cmd = ["qsub", "-s", jobfile]
+            logging.info("A new task will be started (%s)" % cmd)
+            output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]
+            logging.info(output)
+            print 'output', output
+            jobid = output.split()[0]             
+            print 'jobid', jobid
+        else:
+            cmd = ["qsub", jobfile]
+            logging.info("A new task will be started (%s)" % cmd)
+            output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]  ; logging.info(output)
+            jobid = output.split()[0]
+
+        return jobid
+
+
+if __name__ == "__main__":
+    pass