diff --git a/src/filo-fs-nullfs.adb b/src/filo-fs-nullfs.adb
index dc0ca28..73195ba 100644
--- a/src/filo-fs-nullfs.adb
+++ b/src/filo-fs-nullfs.adb
@@ -1,59 +1,13 @@
+with FILO.Blockdev;
+
 package body FILO.FS.NullFS is
 
-   Global_NullFS : NullFS_Type := (
-      State => Unmounted
-   );
-
-   procedure Mount
-      (Item : in out NullFS_Type;
-       Success : out Boolean)
-   is
-   begin
-      Success := True;
-      Item.State := Mounted;
-   end Mount;
-
-   procedure Open
-      (Item    : in out NullFS_Type;
-       Path    : in     String;
-       Success : out    Boolean)
-   is
-   begin
-      Success := True;
-      Item.State := File_Open;
-   end Open;
-
-   procedure Read
-      (Item    : in out NullFS_Type;
-       Buffer  : in out Buffer_Type;
-       Offset  : in     Natural;
-       Success : out    Boolean)
-   is
-   begin
-      Success := True;
-      null;
-   end Read;
-
-   procedure Close 
-      (Item : in out NullFS_Type;
-       Success : out Boolean)
-   is
-   begin
-      Success := True;
-      Item.State := Mounted;
-   end Close;
-
-   ---------------------------------------------------------------------A
-
    function To_Int (Success : Boolean) return Interfaces.C.int is
       (if Success then 1 else 0);
 
-   function C_Mount return Interfaces.C.int
-   is
-      Success : Boolean;
+   function C_Mount return Interfaces.C.int is
    begin
-      Mount(Global_NullFS, Success);
-      return To_Int (Success);
+      return To_Int (True);
    end C_Mount;
 
    function C_Read 
@@ -62,38 +16,26 @@
    return Interfaces.C.int
       with SPARK_Mode => Off
    is
-      use FILO.FS;
       Buffer : Buffer_Type (0 .. Integer(len) - 1) with Address => buf;
-      Offset : constant Natural := Natural(File_Pos);
+      Offset : constant Blockdev_Offset := Blockdev_Offset(File_Pos);
       Success : Boolean;
    begin
-      Read (Global_NullFS, Buffer, Offset, Success);
-      if Success then
-         Set_File_Pos (File_Length (Offset + Buffer'Length));
-      end if;
-      return To_Int (Success);
-      
+      FILO.Blockdev.Read (Buffer, Offset, Success);
+      return To_Int (Success); 
    end C_Read;
 
+
    function C_Dir
-      (Path : Interfaces.C.Strings.chars_ptr)
+      (Path : System.Address)
    return Interfaces.C.int
       with SPARK_Mode => Off
    is
-      use Interfaces.C.Strings;
-      Success : Boolean;
+      First_Byte : Unsigned_8 with Address => Path;
    begin
-      Open (Global_NullFS, Value (Path), Success);
-      return To_Int (Success);
+      if First_Byte = 0 then
+         return To_Int (True);
+      end if;
+      return To_Int (False);
    end C_Dir;
 
-   function C_Close return Interfaces.C.int
-      with SPARK_Mode => Off
-   is
-      Success : Boolean;
-   begin
-      Close (Global_NullFS, Success);
-      return To_Int (Success);
-   end C_Close;
-
 end FILO.FS.NullFS;
diff --git a/src/filo-fs-nullfs.ads b/src/filo-fs-nullfs.ads
index 5f0bd5b..95b6d16 100644
--- a/src/filo-fs-nullfs.ads
+++ b/src/filo-fs-nullfs.ads
@@ -3,38 +3,15 @@
 with System;
 
 package FILO.FS.NullFS is
-   type NullFS_Type is private;
-
-
-   procedure Mount
-      (Item : in out NullFS_Type;
-       Success : out Boolean);
-
-   procedure Open
-      (Item    : in out NullFS_Type;
-       Path    : in     String;
-       Success : out    Boolean);
-
-   procedure Read
-      (Item    : in out NullFS_Type;
-       Buffer  : in out Buffer_Type;
-       Offset  : in     Natural;
-       Success : out    Boolean);
-
-   procedure Close 
-      (Item : in out NullFS_Type;
-       Success : out Boolean);
-
-   ---------------------------------------------------------------------
-
+   -- noop init
    function C_Mount return Interfaces.C.int
    with
       Export,
       Convention => C,
       External_Name => "nullfs_mount";
 
-   function C_Read 
-      (buf : System.Address;
+   function C_Read -- read from blockdev
+      (buf : System.Address; -- char*
        len : Interfaces.C.int)
    return Interfaces.C.int
    with
@@ -42,25 +19,12 @@
       Convention => C,
       External_Name => "nullfs_read";
 
-   function C_Dir
-      (Path : Interfaces.C.Strings.chars_ptr)
+   function C_Dir -- noop like open
+      (Path : System.Address) -- char*
    return Interfaces.C.int
    with
       Export,
       Convention => C,
       External_Name => "nullfs_dir";
 
-   function C_Close return Interfaces.C.int
-   with
-      Export,
-      Convention => C,
-      External_Name => "nullfs_close";
-
-private
-   type State_Type is (Unmounted, Mounted, File_Open);
-
-   type NullFS_Type is record
-      State : State_Type;
-   end record;
-   
 end FILO.FS.NullFS;
diff --git a/src/vfs.c b/src/vfs.c
index 03e9374..f4c7851 100644
--- a/src/vfs.c
+++ b/src/vfs.c
@@ -11,6 +11,7 @@
 	int (*dir_func) (char *dirname);
 	int (*close_func) (void);
 } static const fsys_table[] = {
+	{ "nullfs", nullfs_mount, nullfs_read, nullfs_dir, NULL },
 	{ "ext2", ext2fs_mount, ext2fs_read, ext2fs_dir, NULL },
 	{ "iso9660", iso9660_mount, iso9660_read, iso9660_dir, NULL },
 };
diff --git a/src/vfs.h b/src/vfs.h
index cff04cd..a40bb7e 100644
--- a/src/vfs.h
+++ b/src/vfs.h
@@ -28,6 +28,10 @@
 
 void file_close(void);
 
+int nullfs_mount(void);
+int nullfs_read(char*, int);
+int nullfs_dir(char*);
+
 int ext2fs_mount(void);
 int ext2fs_read(char *buf, int len);
 int ext2fs_dir(char *path);
